Mysql 如果不为NULL,则显示第二个表中的CONCAT()
所以,我有一个数据库,它将用户数据存储在自己的表中,供任何可能需要它的人使用。然后,将创建一个projects表,其中包含一列,用于标识分配给该项目的用户,但可以为空(以防尚未分配给其他人)。如果分配的用户ID不为空,则需要显示用户表中的“last,first” 如果所有项目都有一个用户分配,下面是我的建议:Mysql 如果不为NULL,则显示第二个表中的CONCAT(),mysql,null,left-join,concat,Mysql,Null,Left Join,Concat,所以,我有一个数据库,它将用户数据存储在自己的表中,供任何可能需要它的人使用。然后,将创建一个projects表,其中包含一列,用于标识分配给该项目的用户,但可以为空(以防尚未分配给其他人)。如果分配的用户ID不为空,则需要显示用户表中的“last,first” 如果所有项目都有一个用户分配,下面是我的建议: SELECT p.name, CONCAT(u.lastName, ', ', u.firstName) AS user, p.dueDate FROM projects p, user
SELECT p.name, CONCAT(u.lastName, ', ', u.firstName) AS user, p.dueDate
FROM projects p, users u
WHERE p.uid = u.id
ORDER BY p.id DESC;
当p.uid
为NULL
时,这将导致没有结果,我需要它仍然显示项目,只是将字段留空。这里有一把小提琴:
我尝试过使用CONCAT_WS()
()和左连接
(),结果相同:
Name | User | Due Date
---------------------------------------------------
Proj 4 | Doe, John | October, 24 2014 00:00:00+0000
Proj 2 | Doe, John | October, 27 2014 00:00:00+0000
我需要它显示的是:
Name | User | Due Date
----------------------------------------------------
Proj 5 | | December, 25 2014 00:00:00+0000
Proj 4 | Doe, John | October, 24 2014 00:00:00+0000
Proj 3 | | October, 30 2014 00:00:00+0000
Proj 2 | Doe, John | October, 27 2014 00:00:00+0000
Proj 1 | | October, 22 2014 00:00:00+0000
有人知道我如何做到这一点吗?您需要使用
左连接
而不是隐含的内部连接
,因为您需要项目
表中的所有记录以及用户
表中的所有记录。此外,当u.id
为null
时,您还需要一个CASE
语句(或者if
语句,如果这更符合您的风格),以使用户为null
SELECT p.name,
CASE WHEN u.id IS NOT NULL THEN CONCAT(u.lastName, ', ', u.firstName) ELSE NULL END AS user,
p.dueDate
FROM
projects p
LEFT OUTER JOIN users u on p.uid = u.id
ORDER BY p.id DESC;
您需要使用左联接
而不是隐含的内部联接
,因为您需要项目
表中的所有记录以及用户
表中的所有记录。此外,当u.id
为null
时,您还需要一个CASE
语句(或者if
语句,如果这更符合您的风格),以使用户为null
SELECT p.name,
CASE WHEN u.id IS NOT NULL THEN CONCAT(u.lastName, ', ', u.firstName) ELSE NULL END AS user,
p.dueDate
FROM
projects p
LEFT OUTER JOIN users u on p.uid = u.id
ORDER BY p.id DESC;
正如您所提到的,左join
是一种方法,但是您在其中使用了错误的表。left join
应应用于可能“缺少”行的表,users
。为了处理无人分配给项目的情况,可以使用case
表达式:
SELECT p.name,
CASE WHEN u.id IS NOT NULL
THEN CONCAT(u.lastName, ', ', u.firstName)
END AS user,
p.dueDate
FROM projects p
LEFT OUTER JOIN users u ON p.uid = u.id
ORDER BY p.id DESC;
正如您所提到的,左连接是一种方法,但您在其中使用了错误的表。left join
应应用于可能“缺少”行的表,users
。为了处理无人分配给项目的情况,可以使用case
表达式:
SELECT p.name,
CASE WHEN u.id IS NOT NULL
THEN CONCAT(u.lastName, ', ', u.firstName)
END AS user,
p.dueDate
FROM projects p
LEFT OUTER JOIN users u ON p.uid = u.id
ORDER BY p.id DESC;
对于您提供的额外信息,我想将您的标记为正确。对不起,谢谢你的帮助^^对于你提供的额外信息,我想把你的标记改为正确。对不起,谢谢你的帮助^^完美的谢谢你的帮助。:)完美的谢谢你的帮助。:)