坚持使用多个JOIN的MySQL查询

时间:2013-01-01 07:23:31

标签: mysql sql join

我很惭愧我的MySQL查询有问题,应该很容易中等......所以我希望你能借给我一只手来摆脱这个沟! ;)

简化事情,我有3个表:

1)出版物(colums:idpub(primary)等) 每条记录都是书目参考

2)pubs_index(colums:idpub,idindex) 这是publication和index_entries之间的链接表

3)index_entries(colums:idindex,name) 其中包含可用于索引脉冲的关键字列表

每个发布可以使用0到n index_entries编制索引。

在我的查询中,我想要检索已使用所有关键字'dog','cat'和'mouse'编制索引的出版物。

我尝试了各种JOIN组合,到目前为止没有成功。以下是我最近的可行尝试:

SELECT distinct publications.idpub) 
FROM index_entries as index_entries2, index_entries as index_entries3, publications    LEFT JOIN pubs_index ON publications.idpub = pubs_index.idpub 
INNER JOIN index_entries ON bib_index.idindex=index_entries.idindex 
WHERE AND bib_index.idindex=index_entries2.idindex 
AND bib_index.idindex=index_entries3.idindex 
AND index_entries.name like 'dog'
AND index_entries2.name like 'cat'
AND index_entries3.name like 'mouse';

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:4)

  

我想检索已经全部编入索引的出版物   关键字'dog','cat'和'mouse'。

你可以这样做:

SELECT DISTINCT
  p.idpub
FROM
( 
   SELECT *
   FROM index_entries
   WHERE name IN(SELECT name
                 FROM index_entries 
                 WHERE name IN ('dog', 'cat', 'mouse')
                 GROUP BY name
                 HAVING COUNT(idindex) = 3)
) as i
INNER JOIN publications  p ON p.idindex = i.idindex;

您可能需要修改此查询,以获取您要查找的内容,因为我无法理解您在问题中发布的查询中的其他JOIN。但这个查询背后的想法是这个子查询:

SELECT name
FROM index_entries 
WHERE name IN ('dog', 'cat', 'mouse')
GROUP BY name
HAVING COUNT(idindex) = 3

这将仅选择index_entries中包含所有三个'dog', 'cat', 'mouse'的名称。您可能需要阅读更多相关信息,称为Relational Division