我在设置 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 中有匹配项,在这个例子中是 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)
下次需要记住这一点。 :)
关于php - mySQL 从匹配或不存在的两个表中选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29134810/