我有一张桌子:
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,是不是正确?
这不是我的目标。
答案 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以及指南所说语言的汇总信息。)