нужна помощь в рефакторинге этого запроса - PullRequest
0 голосов
/ 02 июня 2018

Я получил свой запрос, чтобы вернуть то, что хотел, но такое чувство, что это можно было бы сделать лучше.Может ли кто-нибудь показать мне лучший способ сделать этот вопрос, а также я знаю, что столбец «активный» является избыточным, давайте просто пойти с ним.

sql fiddle: http://sqlfiddle.com/#!17/18152/53

вопрос - можно использовать подзапросы, но я не могу понять: - перечислите всех читателей библиотеки. Если у них проверена одна или несколько книгпрочь, отнеси книги покровителям. "

SELECT p.name,
    (SELECT checked_in_date IS NULL AS active
     FROM transactions t
     WHERE p.id = t.patron_id AND b.isbn = t.isbn AND checked_in_date IS NULL),
  b.title
FROM patrons p
LEFT OUTER JOIN transactions t
ON p.id = t.patron_id  AND checked_in_date IS NULL
LEFT OUTER JOIN books b
ON b.isbn = t.isbn

Желаемый результат будет выглядеть примерно так

 name    book_count(optional)  title
 ------------------------------------------
 Hermione Granger   0   (null)
 Terry Boot 1   Advanced Potion-Making
 Terry Boot 1   Fantastic Beasts and Where to Find Them
 Padma Patil    0   (null)
 Cho Chang  0   (null)
 Cedric Diggory 0   (null)

1 Ответ

0 голосов
/ 02 июня 2018

Когда я читаю вопрос, такой запрос делает то, что вы хотите:

SELECT p.name,
       ARRAY_AGG(b.title)
FROM patrons p JOIN
     transactions t
     ON p.id = t.patron_id JOIN
     books b
     ON b.isbn = t.isbn
WHERE t.checked_in_date IS NULL
GROUP BY p.name
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...