假设我想要一个包含作者和他的国家名称的所有书籍的列表。但我只想要著名作家,或者如果他们不知名,他们必须来自 id 123。
SELECT book.id, author.name, country.name
FROM book
LEFT JOIN author ON author.id = book.authorid
LEFT JOIN country ON country.id = author.countryid
WHERE author.famous = 1 OR (author.famous = 0 AND country.id = 123)
此查询为我提供了所有具有著名作者或来自 123 国家/地区的书籍的列表。但我也想要没有作者的书籍,所以我添加“author.id is null or ...”
SELECT book.id, author.name, country.name
FROM book
LEFT JOIN author ON author.id = book.authorid
LEFT JOIN country ON country.id = author.countryid
WHERE (author.id is null or (author.famous = 1 OR (author.famous = 0 AND country.id = 123)))
但是这里有一个问题,现在我们有所有有著名作者或来自 123 国家的作者的书籍,以及没有作者的书籍。
但是,作者不知名且不是来自 123 国的书籍不在列表中。如何在 1 个查询中管理这个?或者这是不可能的,我需要一个子查询吗?
我应该对多个表有连接条件,但这是不可能的。
谢谢!
编辑: 只是为了确保每个人都理解这个问题。最后我想要一个我所有书籍的列表,在书籍旁边我想要作者的信息,但前提是作者很有名或者他来自国家 123。
我的查询有误,所以这里有一个更好的查询
SELECT book.id, author.name, country.name
FROM book
LEFT JOIN author ON author.id = book.authorid
LEFT JOIN country ON country.id = author.countryid
WHERE author.id is null OR author.famous = 1 OR country.id = 123
但是通过这个查询,我仍然没有得到来自 Countryid 123 之外的非著名作者的书籍。我希望这些书籍在列表中,旁边没有作者信息。
所以我不想在作者不知名且不是来自countryid 123的情况下与作者合书!