我很惭愧我的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';
提前感谢您的帮助!
答案 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