1

簡単で中程度のはずのMySQLクエリで問題が発生するのは恥ずかしいです...だから、この溝から抜け出すために手を貸してくれることを願っています! ;)

単純化すると、3 つのテーブルがあります。

1) 各レコードが書誌参照である出版物 (列: idpub (プライマリ) など)

2) パブリケーションと index_entries 間のリンク テーブルである pubs_index (列: idpub、idindex)

3) index_entries (列: idindex, name) には、出版物の索引付けに使用できるキーワードのリストが含まれています。

各出版物は、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これにより、3 つすべてを持つから名前のみが選択され'dog', 'cat', 'mouse'ます。あなたはそれについてもっと読む必要があるかもしれません、それは関係分割と呼ばれています

于 2013-01-01T07:31:17.020 に答える