Я использую postgres
Таблица 1: человек
Columns:: id,person_name,person_add,block_id
FK==>person(block_id) reference block(id)
Таблица 2: блок
Columns:: id,block_name,district_id
FK==> block(district_id) reference district(id)
Таблица 3: район
Columns:: id,district_name,state_id
FK==> district(state_id) reference state(id)
Таблица 4: состояние
Columns:: id,state_name,country_id
FK==> state(country_id) reference country(id)
Таблица 5: страна
Columns:: id,country_name
Я написал запрос следующим образом: *
Когда мне нужны подробности блока
SELECT p.id,p.person_name,b.block_name,d.district_name,s.state_name,c.country_name
FROM person p
INNER JOIN block b ON b.id = p.block_id
INNER JOIN district d ON d.id = b.district_id
INNER JOIN state s ON s.id = d.state_id
INNER JOIN country c ON c.id = s.country_id
WHERE b.id = ? OR d.id = ? OR s.id = ? OR c.id = ?
как написать его в одном запросев следующих случаях ???
1.i имеют только идентификатор страны, и s.id, d.id, b.id будут нулевыми (здесь приведенный выше запрос дает прекрасный результат)
2. у меня есть идентификатор страны, идентификатор штата и d.id, b.id (здесь предпочтительнее c.id)
3.i есть идентификатор страны, идентификатор штата и идентификатор района b.id (то же самое здесь, в соответствии с c.id)
4.i имеет идентификатор страны, идентификатор штата, идентификатор района и идентификатор блока, равный NULL (то же самое здесь он будет предпочитать в соответствии с c.id)