我在设置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。*是不允许的。 :(
答案 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)
下次需要牢记这一点。 :)