2014-06-29 26 views
0

我劃分了一個具有大量行的表,現在我有16個具有相同結構的表。當我嘗試在其中一個表中找到某些內容時它運行良好,但是當我不知道應該在哪裏時,我必須在所有表中搜索它。在許多具有相同結構的mySql表中搜索數據

我在做這樣的:

SELECT id, name, surname, age, sex, telephon, fax, email 
FROM 
    `out_sim_valuesmatrix_ep_ma13_1_16`, 
    `out_sim_valuesmatrix_ep_ma13_2_16`, 
    `out_sim_valuesmatrix_ep_ma13_3_16`, 
etc 
` out_sim_valuesmatrix_ep_ma13_16_16` 
WHERE 
    `appln_idNum1` IN (24842422,24918676,24771783,24908804,24960166,25041955,25017764,25104985,25039175,25089121,24897200,25038905,24907508,24856413,24856413,25001485,24873551,24873551,24747119,25055354,25068104,24969433,24736299,24908799,24947820,24861202,24861202,25101573,24811406,24811406,24939062,25072049,24899024,24908795,25045775,24741197,25033220,24862936,24862936,24926838,24872619,24872619,25011020,24791353,24791353,24983796,24975187,25087564,25044301,24969428,24941046,24944919,24835727,24835727,25015010,25001957,24976200,25057258,25064419,25040849,25063554,25061255,24863241,24863241,24749445,24885880,24751246,24882026,25095717) // Here there are actually 1000 values!!! 

但後來我收到以下消息:

#1052 - Column 'appln_idNum1' in where clause is ambiguous 

我應該怎麼寫我的查詢,找到正確的價值觀?

當我這樣做https://stackoverflow.com/a/409720/3499881它很慢,直到我收到答案。

這個https://stackoverflow.com/a/21260560/3499881不是一個好的解決方案,因爲我的選擇應該有16 * 8行[16表* 8列]。我認爲它太多了,不是嗎?

還有其他的可能嗎?

非常感謝提前!

回答

1

如果表具有相同的結構,那麼您要使用union all,而不是from子句中使用逗號:

SELECT id, name, surname, age, sex, telephon, fax, email 
FROM (select * from `out_sim_valuesmatrix_ep_ma13_1_16` union all 
     select * from `out_sim_valuesmatrix_ep_ma13_2_16` union all 
     select * from `out_sim_valuesmatrix_ep_ma13_3_16` union all 
     . . . 
     select * from `out_sim_valuesmatrix_ep_ma13_16_16` 
    ) t 
WHERE 
    `appln_idNum1` IN (24842422,24918676,24771783,24908804,24960166,25041955,25017764,25104985,25039175,25089121,24897200,25038905,24907508,24856413,24856413,25001485,24873551,24873551,24747119,25055354,25068104,24969433,24736299,24908799,24947820,24861202,24861202,25101573,24811406,24811406,24939062,25072049,24899024,24908795,25045775,24741197,25033220,24862936,24862936,24926838,24872619,24872619,25011020,24791353,24791353,24983796,24975187,25087564,25044301,24969428,24941046,24944919,24835727,24835727,25015010,25001957,24976200,25057258,25064419,25040849,25063554,25061255,24863241,24863241,24749445,24885880,24751246,24882026,25095717) 

,完成所有表的笛卡爾積,這是很多的浪費精力。你只需要所有的行,所以使用union all

+0

謝謝你的回答@ Gordon-linoff。它的工作,但需要很長時間... :-(任何更快的解決方案可能嗎?如果我只有一個表會更好? –

+1

@AloysiadeArgenteuil ...。您可以將'where'子句移動到每個子查詢中。引擎會爲你做這種優化,但MySQL不會 –

相關問題