У меня есть таблица участников, как показано ниже

MemberID    Name     BookID
    1       ABC         10
    1       ABC         14
    2       XYZ         10
    3       PQR         14

Я хочу выбрать MemberID, который содержит оба BOOKID 10 and 14 в одной строке.

Ожидаемый результат:

MemberID
1

Я пробовал код ниже, но он не работает:

select MemberID from member where BookID IN (10,14)
4
Nathan 25 Дек 2015 в 08:34

3 ответа

Лучший ответ

Вы можете попробовать вот так:

SELECT MemberID, GROUP_CONCAT(BookID) AS BookID
FROM member
GROUP BY MemberID
HAVING FIND_IN_SET(10, BookID) > 0 AND FIND_IN_SET(14, BookID) > 0

Вот SQLFIDDLE.

Другое решение может использовать JOIN следующим образом:

SELECT x.MemberID
FROM member x
INNER JOIN member y ON x.MemberID = y.MemberID
  AND x.BookID = 10
  AND y.BookID = 14

Вот SQLFIDDLE.

2
Beginner 25 Дек 2015 в 05:59

Вы можете использовать ключевое слово DISTINCT

 select distinct MemberID from member where BookID
0
A J 25 Дек 2015 в 05:52

Что вам нужно сделать, так это выбрать отдельный MemberID. Что-то типа

SELECT  DISTINCT MemberID FROM member
WHERE BookID IN (10,14)

Предположим, вам нужны результаты для книг с идентификаторами 10 или 12.

0
OscuroAA 25 Дек 2015 в 05:41