SELECT *
FROM
tbl1
LEFT JOIN
tbl2
USING(id1)
LEFT JOIN
tbl3
USING(id2)
WHERE ...
Я выше более четко описал задачу и проблему.Правильно, только скорее всего вместо USING ты захочешь использовать ON и явно указать столбцы.
выводи, причем тут join?Надо вывести ВСЕ строки первой таблицы.
видать строки уникальныеИ здесь никакой DISTINCT уже не помогает.
Да. Не уникальные.выводи, причем тут join?
видать строки уникальные
Не ищу готовых ответов.Двойной джойн решается тремя отдельными запросами, а никак не десятками. При правильной оптимизации суммарная ресурсоемкость этих трех запросов равна или меньше тройного джойна.
В том -то и дело, что в третьей таблице может быть много записей.Здесь не надо ничего экзотического и запросы не обязательно разделять. Отсутствие записи в джойне проверяется пустым значением какой-нибудь колонки, которая точно не пуста при найденной записи.
select *
from countries c
left join towns t on c.id = t.cid
left join streets s on t.id = s.tid
select distinct *
from countries c
left join towns t on c.id = t.cid
left join streets s on t.id = s.tid
И не говори. Ужасная сумятица.Похоже у тебя в голове сумятица. Давай так, ты сделаешь простую выборку без заумных условий. Выведешь эту выборку, посмотришь на нее глазами, и потом будешь анализировать и добавлять дополнительные условия, отфильтровывая ненужные записи.
Именно Мюллер мою задачу и обозначил.Уже выкладывай реальную задачу. Иначе бесполезное словоблудие начинается.
Надо вывести все страны.
select distinct c.*
from countries c
left join towns t on c.id = t.cid
left join streets s on t.id = s.tid
where ...