mySQL从两个匹配或不匹配的表中选择

时间:2015-03-18 23:50:16

标签: php mysql

我在设置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

...我当然只得到A中具有B匹配的条目,在本例中为1和2,因为3在B中没有条目,4只有FLAG 1的条目。 / p>

但是,在Result-Array中,我也需要A3和A4,而B Array-Values只是为空。

如果可以在一个查询中轻松完成,我当然不知道。我已经尝试了一种不同的方法,将查询更改为......

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

...但在这种情况下,b。*是不允许的。 :(

1 个答案:

答案 0 :(得分:0)

感谢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)

下次需要牢记这一点。 :)