SQL (mySQL), чтобы найти, есть ли кузены в некоторых перечисленных семьях - PullRequest
0 голосов
/ 11 марта 2020

Мне нужно перечислить все названия, которые имеют элементы в библиотеках A, B и D. В библиотеке также могут быть элементы C, но мне не нужно об этом беспокоиться

У меня есть это SQL -query - есть ли более разумный способ сделать это? Я полагаю, что проблему можно сформулировать примерно так: есть ли в этих трех перечисленных семьях родственники?

(В реальной жизни мне приходится находить предметы в 42 библиотеках, и реальный вопрос также связан с резервами - так что-нибудь, что делает код короче приветствуется)

SELECT DISTINCT b.biblionumber
FROM items i
LEFT JOIN biblio b ON (b.biblionumber=i.biblionumber)
WHERE i.homebranch = 'A'
AND EXISTS
(
    select *
    FROM items i2 
    WHERE i2.biblionumber = b.biblionumber
    AND i2.homebranch = 'B'
)
AND EXISTS
(
    select *
    FROM items i3 
    WHERE i3.biblionumber = b.biblionumber
    AND i3.homebranch = 'D'
)

1 Ответ

0 голосов
/ 11 марта 2020

Хотя ваш подход может быть самым быстрым, все же вам нужно go для 42 поисков, поэтому вы можете попробовать запрос ниже -

SELECT DISTINCT b.biblionumber
FROM items i
LEFT JOIN biblio b ON b.biblionumber=i.biblionumber
WHERE i.homebranch IN ('A', 'B', 'D', ...../* You Search List */)
GROUP BY i.homebranch
HAVING COUNT (DISTINCT homebranch) = 42;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...