选择返回不正确的结果

时间:2014-10-21 18:02:34

标签: php sql

我有一张桌子:

Person  Language
6          1
6          2
6          3
7          1
7          2

我想选择使用语言1和2和3(第6人)的人

我对此查询进行了编码,但我得不到正确的结果:

SELECT guides.id, guides.nom, guides.prenom, langues.langue
            FROM guides
            JOIN guides_has_langues ON guides_has_langues.guides_id = guides.id
            JOIN langues ON guides_has_langues.langues_id = langues.id
            WHERE guides_has_langues.langues_id = 1 AND guides_has_langues.langues_id = 2 AND guides_has_langues.langues_id = 3

我认为这个查询选择字段是1 AND 2 AND 3,是不是正确?

这不是我的目标。

1 个答案:

答案 0 :(得分:0)

选择语言1,2和3的所有条目。然后按指南分组并保留具有所有三种语言的条目(使用HAVING子句)。要显示语言,请使用dbms提供的函数来连接它们(例如,用于MySQL的GROUP_CONCAT)。

SELECT guides.id, guides.nom, guides.prenom, GROUP_CONCAT(langues.langue)
FROM guides
JOIN guides_has_langues ON guides_has_langues.guides_id = guides.id
JOIN langues ON guides_has_langues.langues_id = langues.id
WHERE guides_has_langues.langues_id IN (1,2,3)
GROUP BY guides.id, guides.nom, guides.prenom
HAVING COUNT(DISTINCT guides_has_langues.langues_id) = 3;

(如果你想要每个指南和语言一行,这会更复杂一些,因为你需要原始的entires以及指南所说语言的汇总信息。)