2011-12-15 86 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

相关问题