私は2つのテーブルを持っています。すべての著者を含む異なる書店を選択するにはどうすればよいですか?すべてのレコードに一致する2番目のテーブルのIDを検索する
TABLE1:
author
1
2
3
表2:
bookstore author
A 1
A 2
A 3
B 1
B 2
期待される結果:
bookstore
A
私は2つのテーブルを持っています。すべての著者を含む異なる書店を選択するにはどうすればよいですか?すべてのレコードに一致する2番目のテーブルのIDを検索する
TABLE1:
author
1
2
3
表2:
bookstore author
A 1
A 2
A 3
B 1
B 2
期待される結果:
bookstore
A
これを処理するためのいくつかの方法があります。この回答は、2つのテーブルの間にINNER JOIN
を使用しています。この参加により、table2
の投稿者と一致しない投稿が削除されます。次に、各書店に集約して、すべての著者がtable1
から残っていることを確認します。
SELECT t2.bookstore
FROM table2 t2
INNER JOIN table1 t1
ON t1.author = t2.author
GROUP BY t2.bookstore
HAVING COUNT(DISTINCT t2.author) = (SELECT COUNT(*) FROM table1)
各著者はtable1
に一度しか表示されないものとします。あまりにもそこに重複があるかもしれない場合は、このサブクエリを使用して作成者を数える必要があります。ここに
SELECT COUNT(DISTINCT author) FROM table1
はデモ:
あなただけを見つけるためにtable2ので集約を行う必要があります各書店にはどのくらい多くの作家がカバーしていますか?最後に、すべての著者を網羅するエントリを選択するためのフィルタリング条件(HAVING)。
SELECT [bookstore]
FROM [dbo].[table2]
GROUP BY [bookstore]
HAVING COUNT(DISTINCT [author]) = (SELECT COUNT(DISTINCT [author]) FROM [dbo].[table1])
このクエリは、潜在的な問題です。 'table2'の特定の書店では、' table1'のものと一致しない著者が存在する可能性があります。もしそうなら、あなたの著者の数は歪んでいます。 –