2011-12-15 8 views
0

私はこの問題を解決するためにいくつかの問題を抱えています...どのような提案も大歓迎です。mysqlは複数の条件に基づいて行を選択し、別の列にリンクします

私は、次のような表があります。

collection_id book_id author 
=================================== 
    1    027  derek 
    2    090  bob 
    2    102  andy 
    2    102  bob 

今私は私が知っているコレクション2に属し、アンディとボブ(すなわち102)によって作成された本のためbook_idを取得します。

andy AND bobのWHERE句を含むクエリは、明らかに1行に1人の著者しかないので何も返しません。 andy OR bobのWHERE句を含むクエリは、090と102のbook_idを返します。なぜなら、bobはbook 090の作成者でもあるからです。

andy AND bobが作成した本の正しいbook_idを取得する方法を教えてください。

多くのご意見ありがとうございます。

答えて

1

サブクエリを使用してのみ解決できます。たとえば、EXISTS keywordを見てください。 (しかし、対称的ではない)に簡略化

SELECT DISTINCT book_id FROM book_table b 
    WHERE exists (SELECT 1 FROM book_table b2 
      WHERE b2.book_id=b.book_id AND b2.author='andy') 
     AND exists (SELECT 1 FROM book_table b3 
      WHERE b3.book_id=b.book_id AND b3.author='bob') 
     AND collection_id=2 

または、:

SELECT book_id FROM book_table b 
    WHERE exists (SELECT 1 FROM book_table b2 
      WHERE b2.book_id=b.book_id AND b2.author='andy') 
     AND author='bob' 
     AND collection_id=2 

また、サブクエリでCOUNTを使用します。

SELECT book_id FROM book_table b 
    WHERE (SELECT COUNT(1) FROM book_table b2 
      WHERE b2.book_id=b.book_id AND b2.author='andy') > 0 
     AND author='bob' 
     AND collection_id=2 
+0

ああBY collection_id = '2' AND author IN( 'アンディ'、 'ボブ')GROUPは、華麗な...キーワードが存在する場所を選択します。私の教育は続きます... 多くの感謝! – DrNoFruit

0
Select * 
from collection 
where author = 'andy' and book_id in (
    Select book_id from collection where author = 'bob' 
) 
0
SELECT * 
FROM (SELECT * 
     FROM table 
     WHERE author = 'andy') a 
    (SELECT * 
     FROM table 
     WHERE author = 'bob') b 
WHERE a.book_id = b.book_id 
+0

私は書式を追加しましたが、あなたの2つのサブクエリの間に '、'がありません。 – Yuck

1

どのように次のようなものについて:

book_idtest_books FROM book_id HAVING COUNT(*)> 1

関連する問題