MySQL 从多个表中选择 WHERE 比较为 NULL 给出前一行的值

标签 mysql select null

我正在尝试获取表 B 的所有行的列表,以及表 A 中的匹配名称(如果给出)。但我的结果不符合预期:/

如果你能帮忙就太好了:)

这是(精简的)代码:

表A:

ID | Name | …
1 | foo | …
2 | bar | …
3 | baz | …

表B:

ID | A_ID | …
1 | 1 | …
2 | 3 | …
3 | 2 | …
4 | 1 | …
5 | NULL | … 

我的查询:

SELECT B.ID, A.Name FROM A, B WHERE B.A_ID = A.ID OR B.A_ID IS NULL ORDER BY B.ID ASC

我想要的输出是这样的:

1 | foo
2 | baz
3 | bar
4 | foo
5 | NULL or ''

但事实是:

1 | foo
2 | baz
3 | bar
4 | foo
5 | foo <-- huh?

非常感谢!

编辑:好的,LEFT JOIN 适用于简单的设置,但在我的实际查询中,我从 5 个表中获取内容,看起来我无法将 2 个表传递到 JOIN 中 - 或者我只是太转储了:(

SELECT 
c.name as c_name, 
a.name as a_name,
p.name as p_name,
e.memo
FROM 
e, c, x, a, p
WHERE 
e.id = x.e_id AND c.id = x.c_id
AND a.id = e.a_id
AND (p.id = e.p_id OR e.p_id IS NULL)

最佳答案

始终使用显式的JOIN语法。一方面,您将了解 LEFT JOIN,这正是您想要的:

SELECT B.ID, A.Name
FROM B LEFT JOIN
     A 
     ON B.A_ID = A.ID 
ORDER BY B.ID ASC;

关于MySQL 从多个表中选择 WHERE 比较为 NULL 给出前一行的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33574220/

相关文章:

c# - 如何测试 Action<...> 是否为空?

Mysql 连接性能很慢

Mysql 查看客户是否按月购买

javascript - 如何在select类型的组件中添加表单?

PHP 选择下拉选项值数组

grails - 在Grails应用程序中的每个 Controller 方法上都会抛出NPE

mysql - 如何在mysql表中逐行计算特定字符串

mysql - 尝试将 sql 脚本导入现有数据库会生成错误

c# - ListView 选定索引已更改

r - 从 R 中具有某些 NULL 值的对象创建数据框