php - mySQL 从匹配或不存在的两个表中选择

标签 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 中有匹配项,在这个例子中是 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/

相关文章:

PHP - 在客户端断开连接时杀死 exec

php - 使用 PHP GRPC Spanner Google Cloud 时出现错误

javascript - 如何将 Google Analytics 对象放入 PHP 脚本之间的 $_SESSION 变量中? (非对象错误)

c# - 可以在 C# 连接器中使用 MySQL @session 变量吗?

mysql - 按多个表mysql中的重复项数量排序

PHP 命名空间和引用未包含在命名空间中的类

mysql - Laravel 5,左连接返回连接右侧的所有项目

php - jQuery Ui 自动完成不使用 PHP MySQL 检索结果

java - 服务器时区值 'AEST' 无法识别或代表多个时区

使用 XPath 进行 PHP 抓取 - html5 问题?