我正在处理一个涉及这两个表的问题。
books
isbn | title | author
------------+-----------------------------------------+------------------
1840918626 | Hogwarts: A History | Bathilda Bagshot
3458400871 | Fantastic Beasts and Where to Find Them | Newt Scamander
9136884926 | Advanced Potion-Making | Libatius Borage
transactions
id | patron_id | isbn | checked_out_date | checked_in_date
----+-----------+------------+------------------+-----------------
1 | 1 | 1840918626 | 2012-05-05 | 2012-05-06
2 | 4 | 9136884926 | 2012-05-05 | 2012-05-06
3 | 2 | 3458400871 | 2012-05-05 | 2012-05-06
4 | 3 | 3458400871 | 2018-04-29 | 2018-05-02
5 | 2 | 9136884926 | 2018-05-03 | NULL
6 | 1 | 3458400871 | 2018-05-03 | 2018-05-05
7 | 5 | 3458400871 | 2018-05-05 | NULL
查询"列出所有书名,并表示是否签出了该书的副本。"所以几乎只是带有签出列的第一个表。
我首先尝试使用结帐书籍对子查询进行SELECT DISTINCT,但这并不起作用。我已经研究过,其他人说要完成这个使用GROUP BY子句而不是DISTINCT,但他们提供的示例是一列查询,当添加更多列时,它不起作用。
这是我最接近的尝试
SELECT DISTINCT ON (title)
title, checked_out
FROM(
SELECT b.title, t.checked_in_date IS NULL AS checked_out
FROM transactions t
natural join books b
ORDER BY checked_out DESC
) t;
答案 0 :(得分:1)
或者您只能加入未签入图书的交易:
SELECT b.title, t.isbn IS NOT NULL AS checked_out
, t.checked_out_date
FROM books b
LEFT JOIN transactions t ON t.isbn = b.isbn AND t.checked_in_date IS NULL
ORDER BY checked_out DESC
答案 1 :(得分:0)
我调整了你的尝试。基本上我改变了数据的加入方式
LOCAL