簡體   English   中英

mySQL從兩個匹配或不存在的表中選擇

[英]mySQL Select from two tables where match or not exists

我在設置SQL查詢時遇到問題,希望有人可以幫助我。

所以這是任務,我想通過一個查詢獲得兩個表。 除非涉及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和A4,而B數組值只是為空。

我不知道是否可以通過單個查詢輕松完成此操作。 我已經嘗試過通過將查詢更改為類似的方法...

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

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

感謝Pat的建議,在這種情況下,我剛剛找到了一個對我有用的解決方案,因此對於任何有興趣的人,我都將WHERE子句移到ON子句,現在我得到了所需的結果...

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM