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测试值是不是是组中最低的,如果值是组中最低的,则在新列中添加“是”/“否”
数据框行和列是不是包含字符串?如果是这样,则在新列中返回该字符串
比较两列:如果匹配,则在新列中打印值,如果不匹配,则将第二列的值打印到新列