我有一张桌子,我们有人和他们可以说话的语言.只有两列,userid和语言.
我想找到所有能说会话印地语和英语,德语和法语的用户.我该怎么写这个查询?我不能使用内部加入4次.检查语言数量的问题可能会增加,我可能想检查更多语言.
userid | 语言
1 | 英语
4 | 英语
1 | 法国
1 | 德国
.................
如果使用MySQL,你可以做类似的事情(要调试,不测试):
SELECT userid FROM (
SELECT userid, GROUP_CONCAT(language SEPARATOR ',') AS languages
FROM UserLanguage
ORDER BY userid ASC, language ASC
GROUP BY userid)
WHERE languages LIKE '%english%french%german%hindi%';
Run Code Online (Sandbox Code Playgroud)
(LIKE子句中的语言必须排序)
或者更快:
SELECT userid
FROM UserLanguage
WHERE language IN ('fr', 'en, 'de', 'hi')
GROUP BY userid
HAVING COUNT(DISTINCT(language)) >= 4
Run Code Online (Sandbox Code Playgroud)