[英]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.