2015-03-18 47 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) 

需要到下一次记住这一点。:)

相关问题