@VexeR
VexeR
26 Nov 2010

Есть три таблицы, условно: "Тип", "Имена" и "Записи". Одним LEFT JOIN можно получить заданную строку из "Записи", где id имени заменен на само имя. А как надо строить зарос, чтобы еще заменить и id типа на сам тип? Мозги уже плавятся к концу недели...

26 Nov 2010

я бы попробовал помочь, но вопрос не понял

26 Nov 2010

select imena.name, tipy.name, zapisi.* from zapisi
join imena on imena.id = zapisi.name_id
join tipy on tipy.id = zapisi.tip_id

26 Nov 2010

SELECT r.id, n.name, t.name FROM records r
LEFT JOIN names n ON n.record_id = r.id
LEFT JOIN types t ON t.record_id = r.id
ORDER BY id

#ntwhw/3 в ответ на /1
26 Nov 2010

Т.е. согласен, только надо LEFT JOIN.

#ntwhw/4 в ответ на /2
26 Nov 2010

Thnx a lot!

#ntwhw/6 в ответ на /5
26 Nov 2010

»ON n.record_id = r.id
»ON t.record_id = r.id
наоборот же надо
ON r.name_id = n.id
ON r.type_id = t.id

#ntwhw/8 в ответ на /3
26 Nov 2010

r.id в связках участвовать не может

#ntwhw/9 в ответ на /3
26 Nov 2010

у тебя неправильная структура базы, сейчас опишу подробнее

#ntwhw/11 в ответ на /10
26 Nov 2010

а, подожди, понял о чём ты

#ntwhw/12 в ответ на /11
26 Nov 2010

select * from tipy
id name
1 простой тип
2 сложный тип
3 зелёный тип

select * from imena
id name
1 Маша
2 Даша
3 Саша

select * from zapisi
id name_id tipy_id
1 1 1
2 1 1
3 2 1
4 3 1
5 1 2
6 2 3

#ntwhw/13 в ответ на /10
26 Nov 2010

ну, так или иначе, сути это всё не меняет. Достаточно двух LEFT JOIN запросов.

#ntwhw/14 в ответ на /13
26 Nov 2010

left/right/full/inner/outer я всегда руками прописываю в зависимости от данных — там же думать надо :)

#ntwhw/15 в ответ на /4
26 Nov 2010

конечно

#ntwhw/16 в ответ на /14
26 Nov 2010

согласен, правда мне по работе в основном требовались LEFT. Рефлекс сработал :)
Ну и мне кажется, в данном случае этот тип соединения всё же уместен.

#ntwhw/17 в ответ на /15
26 Nov 2010

Всем огромное спасибо, все заработало. Пост переводится в readonly

Добавить пост

Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
Для форматирования текста используется Markdown.