4

我有一个名为的连接表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

使用上面提供的数据,我想测试language_id=1 AND language_id=2结果看起来像这样

QUERY RESULT
------------
service_id
------------
 1

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

非常感谢您对此的任何提示!

4

1 回答 1

5
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

如果您一直在查看 2 种语言,则可以使用连接来完成,但聚合版本更容易适应不同数量的 language_id。(添加一个 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
于 2012-03-16T13:57:49.483 回答