如何检查与另一个字段关联的字段,如果匹配则返回值

时间:2014-03-26 15:03:38

标签: sql

在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。

2 个答案:

答案 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