MySQL выбрать строки на основе более чем одного критерия и связаны с другим столбцом - PullRequest
0 голосов
/ 15 декабря 2011

У меня возникли проблемы с разработкой этого ... любые предложения будут приветствоваться.

У меня есть таблица, такая как:

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

Теперь я хочу получить book_id для книги, которая, как я знаю, принадлежит к коллекции 2 и создана Энди И Бобом (т. Е. 102).

Запрос, включающий предложение WHERE для andy AND bob, ничего не возвращает, поскольку очевидно, что в строке есть только один автор. Запрос, содержащий предложение WHERE для andy OR bob, возвращает book_id для 090 и 102, потому что bob также является автором книги 090.

Как бы вы могли получить правильный book_id для книги, автором которой является andy AND bob?!

Большое спасибо за ваши мысли!

Ответы [ 4 ]

1 голос
/ 31 января 2014

Примерно так:

ВЫБРАТЬ book_id ОТ test_books ГДЕ collection_id = '2' И author IN ('andy', 'bob') GROUP BY book_id СЧИТАЯ (*)> 1

1 голос
/ 15 декабря 2011

Это можно решить только с помощью подзапросов.Например, посмотрите на ключевое слово EXISTS .

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 голосов
/ 15 декабря 2011
SELECT *
FROM (SELECT *
      FROM table
      WHERE author = 'andy') a
     (SELECT *
      FROM table
      WHERE author = 'bob') b
WHERE a.book_id = b.book_id
0 голосов
/ 15 декабря 2011
Select *
from collection
where author = 'andy' and book_id in (
    Select book_id from collection where author = 'bob'
)
...