1

我很惭愧在 MySQL 查询中遇到麻烦,它应该是易于中型的......所以我希望你能帮我摆脱这个困境!;)

简化事情,我有3个表:

1)出版物(列:idpub(主要)等),其中每条记录都是参考书目

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

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

每个出版物可以用 0 到 n 个 index_entries 进行索引。

在我的查询中,我想检索已使用所有关键字“狗”、“猫”和“鼠标”编入索引的出版物。

我尝试了各种 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';

在此先感谢您的帮助!

4

1 回答 1

4

我想检索已用所有关键字“狗”、“猫”和“老鼠”编入索引的出版物。

你可以这样做:

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您在问题中发布的查询中的其他 s。但是这个查询背后的想法是这个子查询:

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

这将只选择index_entries具有所有三个的名称'dog', 'cat', 'mouse'。您可能需要阅读更多关于它的信息,它被称为关系除法

于 2013-01-01T07:31:17.020 回答