MySQL left join variation - 甚至在丢失的行上选择

标签 mysql sql join left-join

我已经可以弄清楚如何从主表中连接和选择行,即使辅助表没有匹配的行。我想要的有点不同。

Table A:  id, pid
Table B:  id, pid, uid, aid

我想要的是表 A 中的所有 pids,以及匹配的 aid,如果它存在,对于给定的 uid

也就是说,如果示例数据是:

表A:

1,  p1
2,  p2
3,  p3

表 B:

1, p1,  u1,   abcd
2, p1,  u2,   pqrs
3, p2,  u1,   wxyz

我要选择:

p1,   abcd
p2,   wxyz
p3,   NULL

(u1 的所有条目,如果没有条目则使用 aid=NULL)。

基本上,我已经尝试过:

SELECT A.* FROM A LEFT JOIN B ON A.pid=B.pid WHERE uid='u1'

它不起作用(我明白为什么它不会)。

最佳答案

您可以使用 left join 执行此操作,但是您需要将 b.uid 上的条件移动到 on 子句中where 子句:

select a.id, a.pid, b.aid
from a left join
     b
     on a.pid = b.pid and b.uid = 1;

关于MySQL left join variation - 甚至在丢失的行上选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26345570/

相关文章:

mysql - 将IP地址(IPv4)itno转换为R中的整数

php - 两文件 PHP 联系表

mysql - 有时大写的列名会在 MySQL 窗口中转换为小写?

sql - 我正在将 348k 行数据从 Excel 导入到 VB.net SQL。我得到这个错误 : Timeout expired

sql - oracle db 列日期默认值不是 sysdate

php - 为什么 PDO::PARAM_LOB 会导致允许的内存大小耗尽错误?

mysql - 尝试在插入时插入另一个数据库时触发器抛出错误

sql - 如何查找 SQLite 数据库中所有列的信息?

sql - 获取SQL中计数列的总和

mysql - 从一个记录中选择两个登录