2011-12-15 84 views
0

我在處理這一項時遇到了一些麻煩......任何建議都將非常受歡迎。mysql根據多個條件選擇行並鏈接到另一列

我有一個表,如下所示:

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

現在我想找回book_id一本書,我知道屬於在收集2,由安迪和鮑勃撰寫(即102)。

包含ANDY AND bob的WHERE子句的查詢不會返回任何內容,因爲顯然每行只有一個作者。包含ANDY OR bob的WHERE子句的查詢返回090和102的book_id,因爲bob也是book 090的作者。

你會如何去獲得正確的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

嗯,存在關鍵字...輝煌。我的教育繼續... 非常感謝! – DrNoFruit 2011-12-15 12:23:48

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

我添加了格式,但我認爲你在兩個子查詢之間缺少一個`,`。 – Yuck 2011-12-15 13:44:26

1

如何像下面:

SELECT book_id FROM test_books WHERE collection_id = '2' 和author IN( '和j', '鮑勃')GROUP BY book_id HAVING COUNT(*)> 1

相關問題