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;

mysql - 通过在特定条件下添加具有特定值的字段从两个表中进行选择-LMLPHP
Demo
注意,这有点与COALESCE函数的作用相反。COALESCE检查一个值,如果该值为NULL,则返回一个备用值。上面的令牌表达式检查一个值是否不是CASE,在这种情况下返回NULL,否则将显示永恒的令牌值。

关于mysql - 通过在特定条件下添加具有特定值的字段从两个表中进行选择,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54355520/

10-14 15:15