SQL 如果存在则“是”否则“否”在新列中

Posted

技术标签:

【中文标题】SQL 如果存在则“是”否则“否”在新列中【英文标题】:SQL if exists then "Yes' else "No' in a new column 【发布时间】:2021-01-22 03:10:19 【问题描述】:

我想在表中创建一个新列。如果主键存在于另一个表中或满足某些条件,则返回“yes”,否则返回“no”。这是一个例子:

表 1:

Student
a
b
c
d

表 2:

Student | Subject
a       | english
a       | math
b       | english
b       | science
b       | match
c       | science
c       | english
d       | math

我希望将此列添加到 Table1:

Student | HasMath
a       | Yes
b       | Yes
c       | No
d       | Yes

因此,如果过滤表中存在学生姓名Subject = 'Math',则生成的列将返回“Yes”,否则返回“No”。

谁能告诉我如何通过 SQL 做到这一点?非常感谢。

【问题讨论】:

用您正在使用的数据库标记您的问题。 【参考方案1】:

你可以试试:

SELECT t1.Student, CASE WHEN t2.Student IS NOT NULL THEN 'Yes' ELSE 'No' END AS HasMath
FROM Table1 t1
LEFT JOIN Table2 t2
    ON t2.Student = t1.Student AND t2.Subject = 'math';

【讨论】:

非常感谢。效果很好 你不想要WHERE 子句,因为它会过滤掉没有数学的学生。你不想要这个;您想报告所有学生,因此逻辑属于联接。【参考方案2】:

您通常会使用exists

select t1.*,
       (case when exists (select 1
                          from table2 t2
                          where t2.student = t1.student and t2.subject = 'math'
                         )
             then 'yes' else 'no'
        end) as has_math
from table1 t1;

与蒂姆的回答不同,这保证每个学生只返回一行,即使第二个表中有多个 'math' 行。

【讨论】:

感谢它运行良好并节省了很多计算,因为我们不需要连接表:)

以上是关于SQL 如果存在则“是”否则“否”在新列中的主要内容,如果未能解决你的问题,请参考以下文章

R测试值是不是是组中最低的,如果值是组中最低的,则在新列中添加“是”/“否”

数据框行和列是不是包含字符串?如果是这样,则在新列中返回该字符串

比较两列:如果匹配,则在新列中打印值,如果不匹配,则将第二列的值打印到新列

如何遍历列,检查任何列中是不是存在特定值,改变新列并输入 1 如果存在,如果不存在则输入 0?

SQL:添加行值并显示在新列中

用斜线分隔 Sql Table 列并将值存储在新列中