Модераторы: skyboy

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Выборка всех столбцов из трёх таблиц 
:(
    Опции темы
korob2001
Дата 18.6.2005, 08:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: нет
Всего: 61



Привет!!!
Есть три таблицы, у каждой есть столбец Id. Мне необходимо выбрать записи из трёх таблиц, одним запросом, где Id='10'. Сдвумя таблицами вроде разобрался:
Код

SELECT Veiligheid.*, Comfort.* FROM Veiligheid LEFT JOIN Comfort ON Veiligheid.Id=Comfort.Id WHERE Veiligheid.Id='10'

Но на третью что-то никак ума не сложу. smile
Помогите дописать этот запрос, что бы он выбрал записи трёх, а не двух таблиц. Имя последней таблицы: Overige
Спасибо.


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
Mal Hack
Дата 18.6.2005, 08:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 8
Всего: 261



Код
SELECT Veiligheid.*, Comfort.* , Overige.*
FROM Veiligheid , Comfort , Overige
WHERE Veiligheid.Id='10' AND Comfort .Id='10'  AND Overige.Id='10' 

С JOIN'ами я не дружу пока, так что с ними никак помочь не могу:(

Это сообщение отредактировал(а) Mal Hack - 18.6.2005, 08:18
PM ICQ   Вверх
korob2001
Дата 18.6.2005, 08:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: нет
Всего: 61



Mal Hack - БОЛЬШОЕ СПАСИБО, всё работает. smile
Цитата

С JOIN'ами я не дружу пока, так что с ними никак помочь не могу:(

Да я тоже пока не очень с ними в ладах. smile


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
Kesh
Дата 18.6.2005, 10:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2488
Регистрация: 31.7.2002
Где: Германия, Saarbrü cken

Репутация: 15
Всего: 54



korob2001 Тебе надо было сделать так...

Код

SELECT * FROM Veiligheid WHERE id=10
LEFT JOIN Comfort ON Veiligheid.Id=Comfort.Id
LEFT JOIN Overige ON Veiligheid.Id=Overige.Id


AFAIT так быстрее...


--------------------
user posted image
PM MAIL WWW ICQ Skype   Вверх
korob2001
Дата 18.6.2005, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: нет
Всего: 61



Kesh - СПАСИБО, сейчас перепишу. smile


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
Kesh
Дата 18.6.2005, 20:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2488
Регистрация: 31.7.2002
Где: Германия, Saarbrü cken

Репутация: 15
Всего: 54



Там может чего не правильно быть... Я по памяти писал...
Но вроде похоже на правду...



--------------------
user posted image
PM MAIL WWW ICQ Skype   Вверх
Mal Hack
Дата 19.6.2005, 09:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 8
Всего: 261



Kesh на сколько выиграшен вариант с JOIN'ами, в плане быстродействия и ресурсов?
PM ICQ   Вверх
Kesh
Дата 19.6.2005, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2488
Регистрация: 31.7.2002
Где: Германия, Saarbrü cken

Репутация: 15
Всего: 54



Если id имеют внешние ключи - выигрыш в скорости от t1.id=t2.id очевиден... Если внешних ключей нет, то наверное и выигрыша большого не будет...


--------------------
user posted image
PM MAIL WWW ICQ Skype   Вверх
Bikutoru
Дата 21.6.2005, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлекающийся
**


Профиль
Группа: Участник
Сообщений: 522
Регистрация: 24.5.2005
Где: Москва

Репутация: 1
Всего: 22



Mal Hack
Кстати,
SELECT ... FROM a, b, WHERE a.some_field=b.some_field
и
SELECT ... FROM a INNER JOIN b ON a.some_field=b.some_field - одна и та же конструкция...
Так что дружишь, только не знаешь smile


--------------------
Человек, словно в зеркале мир — многолик, 
Он ничтожен — и он же безмерно велик!
Омар Хайям
PM   Вверх
Mal Hack
Дата 21.6.2005, 19:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 8
Всего: 261



Bikutoru по сути да, но ведь не зря же тогда JOIN ввели.
PM ICQ   Вверх
Bikutoru
Дата 23.6.2005, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлекающийся
**


Профиль
Группа: Участник
Сообщений: 522
Регистрация: 24.5.2005
Где: Москва

Репутация: 1
Всего: 22



Mal Hack, это синонимы, например, в MS SQL Server для LEFT JOIN и RIGHT JOIN есть синонимы *= и =*. Они вводятся для того (мне кажется), чтобы упростить написание запроса. Хотя некоторые снобы (и я в их числе smile ) их использовать не любят...


--------------------
Человек, словно в зеркале мир — многолик, 
Он ничтожен — и он же безмерно велик!
Омар Хайям
PM   Вверх
Kesh
Дата 23.6.2005, 19:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2488
Регистрация: 31.7.2002
Где: Германия, Saarbrü cken

Репутация: 15
Всего: 54



Цитата(Bikutoru @ 21.6.2005, 17:28)
Кстати,
SELECT ... FROM a, b, WHERE a.some_field=b.some_field
и
SELECT ... FROM a INNER JOIN b ON a.some_field=b.some_field - одна и та же конструкция...
Так что дружишь, только не знаешь smile

Не был бы так уверен...

Цитата
Выражение "A LEFT JOIN B" в MySQL реализовано следующим образом:

Таблица B устанавливается как зависимая от таблицы A и от всех таблиц, от которых зависит A.
Таблица A устанавливается как зависимая ото всех таблиц (кроме B), которые используются в условии LEFT JOIN.
Все условия LEFT JOIN перемещаются в предложение WHERE.
Выполняются все стандартные способы оптимизации соединения, за исключением того, что таблица всегда читается после всех таблиц, от которых она зависит. Если имеется циклическая зависимость, MySQL выдаст ошибку.
Выполняются все стандартные способы оптимизации WHERE.
Если в таблице A имеется строка, соответствующая выражению WHERE, но в таблице B ни одна строка не удовлетворяет условию LEFT JOIN, генерируется дополнительная строка B, в которой все значения столбцов устанавливаются в NULL.
Если LEFT JOIN используется для поиска тех строк, которые отсутствуют в некоторой таблице, и в предложении WHERE выполняется следующая проверка: column_name IS NULL, где column_name - столбец, который объявлен как NOT NULL, MySQL пререстанет искать строки (для отдельной комбинации ключа) после того, как найдет строку, соответствующую условию LEFT JOIN.
RIGHT JOIN реализован аналогично LEFT JOIN.

При указании жесткого порядка чтения таблиц в LEFT JOIN и STRAIGHT JOIN оптимизатор связей (который определяет, в каком порядке таблицы должны быть связаны) будет выполнять работу намного быстрее, так как ему потребуется проверять меньшее количество перестановок таблиц.

Обратите внимание: отсюда следует, что если выполняется запрос типа

SELECT * FROM a,b LEFT JOIN c ON (c.key=a.key) LEFT JOIN d (d.key=a.key)
        WHERE b.key=d.key

MySQL будет делать полный просмотр таблицы b, поскольку LEFT JOIN заставит его читать эту таблицу перед d.

В этом случае, чтобы предотвратить полный просмотр таблицы b, нужно изменить запрос таким образом:

SELECT * FROM b,a LEFT JOIN c ON (c.key=a.key) LEFT JOIN d (d.key=a.key)
        WHERE b.key=d.key



--------------------
user posted image
PM MAIL WWW ICQ Skype   Вверх
Bikutoru
Дата 25.6.2005, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлекающийся
**


Профиль
Группа: Участник
Сообщений: 522
Регистрация: 24.5.2005
Где: Москва

Репутация: 1
Всего: 22



Kesh, а INNER JOIN здесь при чем, я же про него говорил?


--------------------
Человек, словно в зеркале мир — многолик, 
Он ничтожен — и он же безмерно велик!
Омар Хайям
PM   Вверх
Kesh
Дата 25.6.2005, 19:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2488
Регистрация: 31.7.2002
Где: Германия, Saarbrü cken

Репутация: 15
Всего: 54



Цитата(Bikutoru @ 23.6.2005, 18:33)
Mal Hack, это синонимы, например, в MS SQL Server для LEFT JOIN и RIGHT JOIN есть синонимы *= и =*. Они вводятся для того (мне кажется), чтобы упростить написание запроса.



--------------------
user posted image
PM MAIL WWW ICQ Skype   Вверх
Bikutoru
Дата 26.6.2005, 10:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлекающийся
**


Профиль
Группа: Участник
Сообщений: 522
Регистрация: 24.5.2005
Где: Москва

Репутация: 1
Всего: 22



Цитата
в MS SQL Server для LEFT JOIN и RIGHT JOIN

Это, вообще-то, только для примера было...


--------------------
Человек, словно в зеркале мир — многолик, 
Он ничтожен — и он же безмерно велик!
Омар Хайям
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0646 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.