我有一个名为languages_services的连接表,它基本上连接了表服务和语言.
我需要找到一个能够同时提供ENGLISH(language_id = 1)和ESPANOL(language_id = 2)的服务.
table languages_services
------------------------
service_id | language_id
------------------------
1 | 1
1 | 2
1 | 3
2 | 1
2 | 3
使用上面提供的数据,我想测试language_id = 1 AND language_id = 2,其结果如下所示
QUERY RESULT
------------
service_id
------------
1
显然它不返回service_id = 2的那个,因为它不为Espanol提供服务.
任何提示都非常感谢!
解决方法:
SELECT
service_id
FROM
language_services
WHERE
language_id = 1
OR language_id = 2
GROUP BY
service_id
HAVING
COUNT(*) = 2
要么…
WHERE
lanaguage_id IN (1,2)
GROUP BY
service_id
HAVING
COUNT(*) = 2
如果你总是看两种语言,你可以用连接来做,但是聚合版本更容易适应不同数量的language_ids. (添加OR,或将项添加到IN列表,并将COUNT(*)= 2更改为COUNT(*)= 3等,等等).
但请注意,这种情况非常糟糕.使用这种表格结构,你无能为力.
编辑使用2种语言的连接的示例
SELECT
lang1.service_id
FROM
language_services AS lang1
INNER JOIN
language_services AS lang2
ON lang1.service_id = lang2.service_id
WHERE
lang1.language_id = 1
AND lang2.language_id = 2
标签:mysql,join,inner-join,sql,relational-division
来源: https://codeday.me/bug/20190621/1250656.html