|
Вопрос по SQL-запросу
|
|||
---|---|---|---|
#18+
Добрый день. Имеется БД информационной системы(система содержит объекты с какими-то атрибутами): table1 - список объектов table2 - список шаблонов атрибутов объектов table3 - все значения атрибутов объектов(связь объекта, шаблона атрибута + значение атрибута). Если значение атрибута объекта не инициализировано, то есть не было заполнено пользователем при создании или редактировании объекта, то table3 не содержит строки, соответствующей данному значению. допустим всего существует 15 объектов, одно из значений атрибута заполнено лишь у 10 из них. Делаю обычный sql-запрос: несколько join для каждого из нужных атрибутов - в результате получаю только 10 записей. Каким образом можно получить все 15 записей с пустым полем значения, если соответствующей записи значения атрибута нет в таблице teble3? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2017, 11:41 |
|
Вопрос по SQL-запросу
|
|||
---|---|---|---|
#18+
Делайте left join вместо inner join. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2017, 12:05 |
|
Вопрос по SQL-запросу
|
|||
---|---|---|---|
#18+
Melkij, делал, не помогает ни left, ни full ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2017, 12:12 |
|
Вопрос по SQL-запросу
|
|||
---|---|---|---|
#18+
Тогда показывайте, как делали. Может, какую очевидную ошибку вроде попытки where по left join таблице без учёта null, что, разумеется, вырождает left join в inner join. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2017, 12:20 |
|
Вопрос по SQL-запросу
|
|||
---|---|---|---|
#18+
MelkijТогда показывайте, как делали. Может, какую очевидную ошибку вроде попытки where по left join таблице без учёта null, что, разумеется, вырождает left join в inner join. Тут походу EAV очередной. Без понимания как SQL писать да. Тяжелый случай. -- Maxim Boguk www.postgresql-consulting.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2017, 12:31 |
|
Вопрос по SQL-запросу
|
|||
---|---|---|---|
#18+
MelkijТогда показывайте, как делали. Может, какую очевидную ошибку вроде попытки where по left join таблице без учёта null, что, разумеется, вырождает left join в inner join. Да, select table1.id, from table1 left join table3 as atr1 on atr1.owner = table1.id left join table2 as templ1 on templ1.id = atr1.templ_id left join table3 as atr2 on atr2.owner = table1.id left join table2 as templ2 on templ2.id = atr2.templ_id where templ1.id = 'id1' and templ2.id = 'id2' Атрибут id2 заполнен не у всех объектов. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2017, 13:10 |
|
Вопрос по SQL-запросу
|
|||
---|---|---|---|
#18+
вернее select table1.id, atr1.content, atr2.content from table1 left join table3 as atr1 on atr1.owner = table1.id left join table2 as templ1 on templ1.id = atr1.templ_id left join table3 as atr2 on atr2.owner = table1.id left join table2 as templ2 on templ2.id = atr2.templ_id where templ1.id = 'id1' and templ2.id = 'id2' ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2017, 13:18 |
|
Вопрос по SQL-запросу
|
|||
---|---|---|---|
#18+
Спасибо, все получилось) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2017, 15:07 |
|
Вопрос по SQL-запросу
|
|||
---|---|---|---|
#18+
Zilbersteinselect table1.id, atr1.content, atr2.content from table1 left join table3 as atr1 on atr1.owner = table1.id left join table2 as templ1 on templ1.id = atr1.templ_id left join table3 as atr2 on atr2.owner = table1.id left join table2 as templ2 on templ2.id = atr2.templ_id where templ1.id = 'id1' and templ2.id = 'id2' Атрибут id2 заполнен не у всех объектов. Надо так: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Тут важно, чтобы условие, в котором задействован пустой столбец, попало в условие внешнего соединения. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2017, 15:23 |
|
|
start [/forum/topic.php?fid=53&msg=39383006&tid=1996761]: |
0ms |
get settings: |
7ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
76ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 167ms |
0 / 0 |