2015-03-18 78 views
1

我有一個問題,建立一個SQL查詢,希望有人能幫助我。mySQL從兩個表中選擇匹配或不存在

所以這裏的任務,我有兩個表我想用一個單一的查詢。不是一個大問題,除非涉及WHERE子句匹配。我需要表A中的所有條目,但僅匹配表B中的條目,但保留表A中不存在鏈接ID的條目。

要明確什麼我這裏是對錶結構的一例...

TABLE A  

ID | VAL1 | VAL2 | VAL3  
1 | abc | xyz | 123  
2 | abc | xyz | 123  
3 | abc | xyz | 123  
4 | abc | xyz | 123 

TABLE B 

ID | A-ID | X1 | X2 | X3 | FLAG  
1 | 1 | ab | xy | 98 | 1  
2 | 1 | ab | xy | 98 | 1  
3 | 1 | ab | xy | 98 | 0  
4 | 2 | ab | xy | 98 | 1  
5 | 2 | ab | xy | 98 | 0  
6 | 4 | ab | xy | 98 | 1 

因此,如果使用這種查詢...

SELECT a.*, b.* FROM Table_A AS a LEFT JOIN Table_B AS b ON b.a-id = a.id WHERE b.flag = 0 

...我得到的,當然只有在B中具有匹配的A的條目(在本例中爲ID 1和2),因爲3在B中沒有條目並且僅有4條具有FLAG 1的條目。

但是,在結果數組,我需要A3和A. 4以及B陣列值簡單地爲空。

我有currenlty沒有線索,如果這可以很容易地完成,並在一個單一的查詢。我已經嘗試了不同的方法,通過改變查詢類似的東西...

SELECT a.*, (SELECT b.* FROM Table_B AS b WHERE b.a-id = a.id) AS array FROM Table_A AS a 

...但在這種情況下b。*是不允許的。 :(

回答

0

感謝帕特爲您的建議,我剛剛發現了一個解決方案,在這種情況下爲我工作,因此對於任何可能感興趣的人,我將WHERE子句移到ON子句,現在我得到結果I需要...

SELECT a.*, b.* FROM Table_A AS a LEFT JOIN Table_B AS b ON (b.a-id = a.id AND b.flag = 0) 

需要到下一次記住這一點。:)

相關問題