在SQL中是否有办法检查某个字段是否与另一个字段相关联,并且在select语句中返回一些值。这就是我的意思:
如果我有一张像
这样的表格Id Language
-----------------
1 Spanish
2 English
1 English
3 English
4 English
2 Spanish
2 English
如何返回
之类的内容Id SpanishAssociated
------------------------------
1 Yes
2 Yes
3 No
4 No
我现在遇到的问题是,如果我做了类似
的事情SELECT Id, SpanishAssocated = (CASE SpanishAssociated WHEN 'Spanish' THEN 'Yes'
ELSE 'NO' END)
FROM MyTable
我得到一张类似
的表格Id SpanishAssociated
------------------------------
1 Yes
1 No
2 Yes
2 No
2 No
3 No
4 No
实际查询要复杂得多,但这是一般性的想法。基本上我只想要一个列为yes,如果“西班牙语”与用户ID相关联(在表中不是唯一的)(即表中至少有一行我从用户的“西班牙语”出现的地方选择id。
答案 0 :(得分:0)
尝试是否适合您:
SELECT Id, SpanishAssocated = MAX(CASE SpanishAssociated WHEN 'Spanish' THEN 'Yes'
ELSE 'NO' END)
FROM MyTable
GROUP BY Id;
注意 - 它依赖于字符串比较('是'大于'否')并且可能对某些排序规则不起作用
答案 1 :(得分:0)
有人建议我使用子查询并将其加入我的主查询中,该查询运行良好。
我最终得到了类似的东西
SELECT OtherTables.Id, Language = (CASE WHEN X.Id IS NOT NULL THEN 'Yes' ELSE 'No' END)
--Select a bunch of other stuff from the other tables here
FROM OtherTables
--A bunch of other table joins go here
LEFT JOIN (SELECT DISTINCT Id FROM MyTable WHERE Language = 'Spanish') X
ON X.Id = MyTable.Id
GROUP BY OtherTables.Id, X.Id -- and other stuff I selected