我有一张表,我们有用户的用户 ID 和他们可以说的语言。只有两列,用户 ID 和语言。
我想找到所有会说印地语、英语、德语和法语的用户。 我应该如何编写此查询?我不能使用 Inner Join 4 次。问题是检查语言数量可能会增加,我可能想检查更多语言。
用户名 |语言
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%';
(LIKE子句中的语言必须排序)
How to use GROUP BY to concatenate strings in MySQL?
或者更快:
SELECT userid
FROM UserLanguage
WHERE language IN ('fr', 'en, 'de', 'hi')
GROUP BY userid
HAVING COUNT(DISTINCT(language)) >= 4
关于sql - 查询 SELECT all users who speak all the specified languages,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6057074/