查询SELECT所有使用所有指定语言的用户

Nan*_*nds 2 sql database join

我有一张桌子,我们有人和他们可以说话的语言.只有两列,userid和语言.

我想找到所有能说会话印地语和英语,德语和法语的用户.我该怎么写这个查询?我不能使用内部加入4次.检查语言数量的问题可能会增加,我可能想检查更多语言.

userid | 语言
1 | 英语
4 | 英语
1 | 法国
1 | 德国
.................

Vin*_*rat 8

如果使用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子句中的语言必须排序)

如何使用GROUP BY来连接MySQL中的字符串?


或者更快:

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)