SQL在连接表上使用条件AND以确保至少匹配两个或多个值

cha*_*lor 4 mysql sql join inner-join relational-division

我有一个名为的连接表languages_services基本上连接表serviceslanguages.

我需要找到一个能够同时服务于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
Run Code Online (Sandbox Code Playgroud)

使用上面提供的数据,我想测试language_id=1 AND language_id=2结果的样子

QUERY RESULT
------------
service_id
------------
 1
Run Code Online (Sandbox Code Playgroud)

显然它不返回service_id = 2的那个,因为它不为Espanol提供服务.

任何提示都非常感谢!

Mat*_*lie 5

SELECT
  service_id
FROM
  language_services
WHERE
     language_id = 1
  OR language_id = 2
GROUP BY
  service_id
HAVING
  COUNT(*) = 2
Run Code Online (Sandbox Code Playgroud)

要么...

WHERE
  lanaguage_id IN (1,2)
GROUP BY
  service_id
HAVING
  COUNT(*) = 2
Run Code Online (Sandbox Code Playgroud)

如果你总是看两种语言,你可以用连接来做,但是聚合版本更容易适应不同数量的language_ids.(添加OR,或将项添加到IN列表,并更改COUNT(*) = 2COUNT(*) = 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
Run Code Online (Sandbox Code Playgroud)