SQL - 如果搜索条件与其中一个值匹配,则选择多个行

时间:2017-11-17 15:35:01

标签: sql sql-server

道歉,如果已经被问到但不太确定要搜索什么。如果搜索标准匹配其中一个值,我想选择muliple LocaleIds。

目前我正在进行这样的简单搜索:

SELECT *
   FROM [dbo].[Localizations]
   WHERE Value like 'task switching' OR ResourceId like 'task switching'
   ORDER BY LocaleId, ResourceId

这导致:

Id      ResourceId                      Value            LocaleId
53591   AssessmentType_Description_21   Task Switching  
53247   Attribute_Description_1         Task Switching  
53378   Attribute_Description_132       Task Switching  

但是,缺少Other LocaleIds的相关行(英语LocaleId为空')。例如,我要求:

Id      ResourceId                      Value                  LocaleId
53591   AssessmentType_Description_21   Task Switching  
53247   Attribute_Description_1         Task Switching  
53378   Attribute_Description_132       Task Switching  
42257   AssessmentType_Description_21   Aufgabenwechsel         de
42839   Attribute_Description_1         Aufgabenwechsel         de
42876   Attribute_Description_132       Aufgabenwechsel         de
45864   AssessmentType_Description_21   Changement de tâches    fr
46446   Attribute_Description_1         Changement de tâches    fr
46483   Attribute_Description_132       Changement de tâches    fr

如何获取所有LocaleIds的完整结果集?任何帮助表示赞赏。

编辑: 抱歉,我希望所有与“任务切换”匹配的记录及其他语言的相应值。只会用1种语言搜索。

3 个答案:

答案 0 :(得分:2)

我希望这个SQL能解决你的问题:

SELECT * FROM [dbo].[Localizations] 
WHERE ResourceId in (SELECT ResourceId 
                     FROM [dbo].[Localizations] 
                     WHERE Value like 'task switching') 
ORDER BY LocaleId, ResourceId

答案 1 :(得分:1)

我会在这里推荐EXISTS,而不是IN:

SELECT *
FROM dbo.Localizations loc
WHERE EXISTS
(SELECT 1
 FROM dbo.Localizations loc2
 WHERE value LIKE 'task switching'
 AND loc.resourceID = loc2.resourceid)
ORDER BY localeid, resourceid

这种方式应该运行得更快。

答案 2 :(得分:0)

使用AND组合多个运算符。

SELECT *
FROM [dbo].[Localizations]
WHERE Value like 'task switching'
AND Value like 'aufgabenwechsel'
AND Value like 'changement de tâches'
ORDER BY LocaleId, ResourceId

请记住,SQL语句中有时不接受像“â”这样的特殊字符,因此建议您查看Database normalization