Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.116.90.141] |
|
Данный раздел предназначается исключительно для обсуждения вопросов использования языка запросов SQL. Обсуждение общих вопросов, связанных с тематикой баз данных - обсуждаем в разделе "Базы данных: общие вопросы". Убедительная просьба - соблюдать "Правила форума" и не пренебрегать "Правильным оформлением своих тем". Прежде, чем создавать тему, имеет смысл заглянуть в раздел "Базы данных: FAQ", возможно там уже есть ответ. |
Сообщ.
#1
,
|
|
|
Добрый день!
Хотел сделать выборку из двух разных таблиц, но используя для этого только лишь один запрос. Написал вот такой: SELECT brands.brand_name, models.model_name FROM brands, models WHERE brands.brand_id='1' AND models.model_id='5' LIMIT 1 Вот хотел посоветоваться со знатоками, правильно ли это, или же есть более красивый, и правильный способ получить желаемое? Спасибо. |
Сообщ.
#2
,
|
|
|
Ну если результат тот что надо, то норм.
|
Сообщ.
#3
,
|
|
|
Цитата domencom @ Да, результат тот что надо. Спасибо. |
Сообщ.
#4
,
|
|
|
Цитата iPhonesoft @ Вот хотел посоветоваться со знатоками, правильно ли это, или же есть более красивый, и правильный способ получить желаемое? Спасибо. В данном запросе "закопана" некая бомба замедленного действия, потому что явно не указано как связаны brands, models. В результате сначала строится декартов произведение всех записей из обоих таблиц, потом производится отбор по критериям и из оставшегося берется верхняя запись Возможное в будущем грабли: 1. тормоза 2. разный, непредсказуемый результат Как лечить 1. добавить джойн таблиц 2. прописать в явном виде сортировку |
Сообщ.
#5
,
|
|
|
iPhonesoft
какая БД и как связаны таблиц? LIMIT 1 А вот это всегда нехороший костыль |
Сообщ.
#6
,
|
|
|
Цитата Павел Калугин @ сначала строится декартов произведение всех записей из обоих таблиц, потом производится отбор по критериям Ну это разве что в ОЧЕНЬ древней версии какой-нить СУБД... Цитата vladimir74 @ LIMIT 1 А вот это всегда нехороший костыль Есть подозрения, что brands.brand_id и models.model_id - первичные ключи таблиц. Тогда пофиг. |
Сообщ.
#7
,
|
|
|
Цитата Akina @ Ну это разве что в ОЧЕНЬ древней версии какой-нить СУБД... а что будет в современной СУБД в результате запроса SELECT brands.brand_name, models.model_name FROM brands, models хотя если подозрение про ключи верно.. Тогда странным выглядит LIMIT 1 |
Сообщ.
#8
,
|
|
|
Спасибо большое всем ответившим на мой вопрос. Хочу уточнить:
1) БД MySQL версия 5.5.42 2) Таблицы brands и models никак между собой не связаны 3) brand_id и model_id - первичные ключи таблиц 4) Использовал LIMIT 1 т.к. в результате запроса всегда возвращается только лишь одна запись. Поэтому посчитал логичным указать LIMIT 1 5) Для чего это мне нужно? Хотел построить навигационную цепочку (Breadcrumb) на сайте. Например: Smartphones -> Apple -> iPhone 5s Еще раз спасибо огромное всем за помощь. |
Сообщ.
#9
,
|
|
|
Цитата Павел Калугин @ что будет в современной СУБД в результате запроса Отбор по условиям для одной таблицы будет выполнен ещё до связывания. Гарантированно - при наличии подходящего для этого условия индекса с высокой селективностью, и с достаточно высокой вероятностью - при его отсутствии. Добавлено Цитата iPhonesoft @ Использовал LIMIT 1 т.к. в результате запроса всегда возвращается только лишь одна запись. Поэтому посчитал логичным указать LIMIT 1 В данном случае - бессмысленно, указание лишнее. А вот не будь индексов - в LIMIT был бы смысл, он бы дал принудительное завершение сканирования после нахождения записи. |
Сообщ.
#10
,
|
|
|
Цитата Akina @ В данном случае - бессмысленно, указание лишнее. А вот не будь индексов - в LIMIT был бы смысл, он бы дал принудительное завершение сканирования после нахождения записи. Спасибо большое за разъяснение, теперь буду знать. |
Сообщ.
#11
,
|
|
|
Цитата Akina @ не будь индексов Я имел в виду то, что после пре-джойн отбора и последующего объединения остаётся ОДНА запись - т.е. что поля отбора unique. |
Сообщ.
#12
,
|
|
|
Если не много подкорректировать, то будет вполне достойно
|
Сообщ.
#13
,
|
|
|
Цитата iPhonesoft @ Таблицы brands и models никак между собой не связаны Цитата iPhonesoft @ Хотел сделать выборку из двух разных таблиц, Цитата iPhonesoft @ WHERE brands.brand_id='1' AND models.model_id='5' Цитата iPhonesoft @ Да, результат тот что надо. Естественно что результат предсказуем. С таким же успехом можно добится соответствия Ракета -> Tesla -> Запорожец |