У меня есть 2 таблицымного для многих запросов возврата тузд повторяющихся строк
1 ресурсы
id | name | type
1 | X | form
2 | YY | post
3 | ZZ | container
2 res_res
id | parent_id | son_id
1 | 1 | 2
2 | 3 | 1
теперь я хочу, чтобы выбрать ресурс. *, Res_res.id из все ресурсы, связанные с идентификатором ресурса (1)
ожидаемый результат
link_id | id | name | type |
1 | 2 | YY | post |
2 | 3 | ZZ | container
мой запрос
1:
SELECT distinct r.* FROM `resources` as r
join res_res as l on (l.parent_id=r.id or l.son_id=r.id)
where l.parent_id = 2 or l.son_id = 2
этот запуск запроса, как ожидается, и возвращать результат я хочу, за исключением того, что она не включает идентификатор или ссылку (ID из resource_resource таблицы), но если я запускаю это
2:
SELECT distinct l.id as link_id,r.* FROM `resources` as r
join res_res as l on (l.parent_id=r.id or l.son_id=r.id)
where l.parent_id = 2 or l.son_id = 2
это возвращает столько повторяющихся строк; так что я делаю неправильно?
У меня проблема в том, что мое условие соединения возвращает идентификатор parent-id и son-id при совпадении строки, поэтому происходит дублирование, мне нужно поместить случай if в select, чтобы выбрать только другое поле.
есть ли лучший способ выбрать все ресурсы, связанные с resource.id X, и включить идентификатор соединения?
Мне не нравится использовать group_by, потому что он пишет временную. который замедляет мою работу.
благодаря
спасибо, но это возвращает только родительскую строку, также дублированную так же, как и количество ее детей; Например, если я запустил его, он вернет строку r.I'd = 2 столько раз, что и одна строка – Zalaboza
Выберите l.Id, r. * из ресурсов как r cross join red_res as l on (l.parent = 2 и l .son_id = r.I'd) или (l.son_id = 2 и l.parent_id = r.id) Works :) спасибо – Zalaboza