объединение таблиц
Релиб
Форумы       Участники    Календарь    Кто он-лайн?
Добро пожаловать, гость ( Вход | Регистрация )
        



объединение таблиц Expand / Collapse
Автор
Сообщение
12.08.2005 16:43
Junior Member

Junior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior Member

участник
Last Login: 12.09.2005 0:53
Сообщ.: 19, Visits: 210
Целевая платформа: MySQL

Есть основная таблица, users, в которой столбцы userID, name, itemID, stuffID, и дополнительные таблицы items (поля itemID и name) и stuffs (поля stuffID и name). Каким запросом получить записи таблицы users, чтобы вместо itemID и stuffID были подставлены поля name соответствующих таблиц? Сейчас делаю всё через SELECT ... FROM users, items, stuffs WHERE users.itemID = items.itemID и т.д., а с JOIN''ами не разобрался - так что прошу помощи =))
Сообщ. #878118
17.08.2005 1:06
Junior Member

Junior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior Member

участник
Last Login: 12.09.2005 0:53
Сообщ.: 19, Visits: 210
ну может хоть кто-то на форуме дочитал какую-нибудь книжку по SQL до JOIN''ов?..
Сообщ. #878396
17.08.2005 1:12
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

администратор
Last Login: 13.11.2007 13:41
Сообщ.: 4 421, Visits: 49 251
а чем указанный самим же запрос не устраивает? зачем JOIN?
Сообщ. #878397
17.08.2005 16:56
Junior Member

Junior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior Member

участник
Last Login: 12.09.2005 0:53
Сообщ.: 19, Visits: 210
а тем, что в моём запросе сначала считается декартово произведение трёх таблиц, а затем из них выбираются нужные строки по WHERE. если в таблицах по 1000 строк - декартово произведение содержит их 1000*1000*1000 - аля миллиард. JOIN же по полю с UNIQUE-ключом выполняется на порядки быстрее, плюс возвращаемый без JOIN-а рекордсет является read-only, что пока вроде не мешает, но очень может пригодиться...
Сообщ. #878464
18.08.2005 10:32
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 14.05.2003 9:56
Сообщ.: 99, Visits: 1 090
Это все просто table1 INNER JOIN table2 USING ( поле связи ) или table1 INNER JOIN table2 ON условие соединения

есть table1 LEFT JOIN table2 USING ( поле связи ) - это значит что связь будет левая, тобиш, если нет данных в table2 которые отвечают ключу в первой, то до полной таблицы будет дополнено NULL. Также есть table1 RIGHT JOIN table2 USING ( поле связи ).

И последний это CROSS JOIN, это тоже самое что и from table1, table2
Сообщ. #878508
18.08.2005 10:34
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 14.05.2003 9:56
Сообщ.: 99, Visits: 1 090
А вообще лутше самому по таким вопросам обращаться к документации. Читать документации это совсем не тяжело.
Сообщ. #878510
18.08.2005 19:57
Junior Member

Junior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior Member

участник
Last Login: 12.09.2005 0:53
Сообщ.: 19, Visits: 210
тот сиквел, что я знаю, я изучил фактически по документации по MySQL, но иногда там не очень понятно написано... плюс ангельский язык... потому и приходится иногда спрошать совета на стороне...

по теме: пасиба всем ответившим, методом проб и ошибок остановился на
tbl2 JOIN tbl1 USING(FieldID)
Сообщ. #878572
19.08.2005 10:03
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 14.05.2003 9:56
Сообщ.: 99, Visits: 1 090
[off top]
Без английского далеко в программирование не уйдеш. Начинай его учить как можно раньше
[on top]
Сообщ. #878605
« пред. тема | след. тема »


Эту тему читают Expand / Collapse
Посетители: 0 (0 гостей, 0 участников, 0 скрыт.участников)
Сейчас нет участников, просматривающих тему.
Модераторы: Alexey, boombastik, bazile, pl

Время GMT +3:00, Сейчас 11:36