sql - 查询 SELECT all users who speak all the specified languages

标签 sql database join

我有一张表,我们有用户的用户 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/

相关文章:

PHP 准备语句 bind_param() 错误

MySQL服务器存储过程语法错误

java - 使用 JSTL 和数据库中的键/值在 JSP 中进行本地化

asp.net-mvc - MVC3 - 使用 Include 时对数据库查询进行排序

mysql - 从 CategoryID 为 1 的 2 个表中选择 *

sql-server - SUM 和 JOIN 显示在一条记录中

php - 如何在php中显示SUM()

sql - MySQL按共享根域的url数据行分组

android - MYSQL查询,合并不相关表的记录以进行自动完成

mysql - 在 JOIN 中重写慢速 SQL(子)查询