Предположим, что мне нужен список всех моих книг вместе с автором и его именем. Но я хочу только известных авторов, или если они не известны, то они должны быть из страны ид 123.MySql Query with join conditions
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 равно нулю или ...»
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 запросе? Или это невозможно, и мне нужен подзапрос?
Мне нужно было объединить условия на нескольких таблицах, но это невозможно.
Спасибо!
Редактировать: Просто убедитесь, что все понимают проблему. В конце концов, я хочу список все мои книги, а рядом с книгами, которые я хочу, информацию об авторе, но только если автор известен, или если он из CountryId 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. Я хочу, чтобы эти книги в списке без автора информации рядом с ним.
Так что я не хочу вступать в книгу с автором, когда автор не знаменит, а не из страны 123!
У меня была ошибка, я имел в виду author.famous = 1 OR (author.famous = 0 AND country.id = 123). Я изменил это. И вы правы относительно бесполезной проверки author.famous = 0. Но все же страна такая же, и я не получаю книги незаслуженных авторов из-за пределов страны. 123 – Tim
@ Тим, вы уверены, что ваш первый запрос дает вам книги не известных от 123? – Itay