Table1: Students
ID Name EternalToken
200901212 Joe xxxxxx
200809922 David yyyyyy
201009122 Chris zzzzzz
Table2: Banned
ID StudentID
1 200901212
我想选择所有的学生并显示一个额外的字段,该字段指示该学生已被禁止隐藏EternalToken
SELECT * FROM Students s
LEFT JOIN Banned b
ON s.ID = b.StudentID
这将显示两个表的组合。但是,我希望结果是这样的:
ID Name EternalToken Banned
200901212 Joe NULL 1
200809922 David yyyyyy 0
201009122 Chris zzzzzz 0
只有被禁止的学生才应该有
EternalToken = NULL
请注意,这是一个我正在努力实现的例子,而不是我正在做的事情。
学生和被禁只是一个例子,我知道这不是一个多对多的关系,所以我可以在一个表。但从技术上回答这个问题将有助于我实现灵活的解决方案。
最佳答案
您可以使用以下查询:
SELECT
s.ID,
s.Name,
CASE WHEN b.StudentID IS NOT NULL THEN NULL ELSE s.EternalToken END AS EternalToken,
CASE WHEN b.StudentID IS NULL THEN 0 ELSE 1 END AS Banned
FROM Students s
LEFT JOIN Banned b
ON s.ID = b.StudentID;
Demo
注意,这有点与
COALESCE
函数的作用相反。COALESCE
检查一个值,如果该值为NULL
,则返回一个备用值。上面的令牌表达式检查一个值是否不是CASE
,在这种情况下返回NULL
,否则将显示永恒的令牌值。关于mysql - 通过在特定条件下添加具有特定值的字段从两个表中进行选择,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54355520/