首页 > 解决方案 > 通过在特定条件下添加具有特定值的字段从两个表中进行选择

问题描述

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

请注意,这是我正在努力实现的一个例子,而不是我正在做的事情。Student 和 Banned 只是一个例子,我知道这不是多对多的关系,所以我可以在一张表中实现。但是从技术上回答这个问题将帮助我获得一个灵活的解决方案。

标签: mysqlsql

解决方案


您可以使用以下查询:

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;

在此处输入图像描述

演示

请注意,这与COALESCE函数的作用相反。 COALESCE检查一个值并在该值是 时返回一个替代值NULL。上面CASE的令牌表达式检查一个值是否不是 NULL,并NULL在这种情况下返回,否则显示永恒的令牌值。


推荐阅读