|
Подскажите по SQL запросу | ☑ | ||
---|---|---|---|---|
0
Супер король
26.03.15
✎
11:24
|
вот запрос. Не пойму как он работает. Точнее почему он работает. Не вижу связей таблицы "c" с другими таблицами. Как он узнает какие данные надо выбрать из таблицы "с"?
SELECT i.* , c.title, m.id FROM c, m, i WHERE m.item_id = i.id AND i.published =1 AND ( m.addr_hash = '' ) GROUP BY i.id LIMIT 1000 |
|||
1
Ёпрст
26.03.15
✎
11:27
|
обычный inner join
|
|||
2
Ёпрст
26.03.15
✎
11:27
|
че тебя там смущает ?
|
|||
3
Ёпрст
26.03.15
✎
11:28
|
даже не так, там кросс джоин таблички с с иннер джоином между табличками m, i
|
|||
4
shuhard
26.03.15
✎
11:29
|
(0) это декартово произведение, все строки с попадут в выборку
|
|||
5
Ненавижу 1С
гуру
26.03.15
✎
11:29
|
вот это SELECT i.* , c.title, m.id
и это GROUP BY i.id странно но я не специалисту по данному диалекту |
|||
6
Ёпрст
26.03.15
✎
11:34
|
(5) да это не странно, это не работает.
Разве что, sqlite такой синтаксис "прощает", по крайней мере, в 1sqlite это так |
|||
7
фобка
26.03.15
✎
11:37
|
(0) из таблицы "c" запрос берет все данные
|
|||
8
Супер король
26.03.15
✎
11:38
|
(4) Вот и я думал что все строки попадут. А получается что не все
|
|||
9
Супер король
26.03.15
✎
11:39
|
вообще из С попадут все строки и умножатся на каждую строку из других таблиц?
|
|||
10
фобка
26.03.15
✎
11:44
|
(9) да, другие таблицы связаны по условию where
|
|||
11
фобка
26.03.15
✎
11:45
|
Эта связь уже inner join
|
|||
12
Ёпрст
26.03.15
✎
11:49
|
(8) см (3)
твой запрос эквивалентен SELECT i.* , c.title, m.id FROM c cross join m inner join i on m.item_id = i.id AND i.published =1 AND m.addr_hash = '' GROUP BY i.id LIMIT 1000 |
|||
13
фобка
26.03.15
✎
11:53
|
Select ... from i Cross join c
|
|||
14
фобка
26.03.15
✎
11:53
|
Inner join m
|
|||
15
фобка
26.03.15
✎
11:54
|
Хотя возможно (12) и 13+14 эквивалентны
|
|||
16
Супер король
26.03.15
✎
11:58
|
То есть смысла выбирать таблицу С вообще нет в этом запросе?
|
|||
17
Супер король
26.03.15
✎
11:59
|
(6) а что странного в группировке?
|
|||
18
фобка
26.03.15
✎
12:05
|
(16) почему это? На каждый title привязаны значения из других таблиц
(17) в группировке нужно указать все поля иначе субд поругается |
|||
19
shuhard
26.03.15
✎
12:07
|
(16) бессмысленный вопрос, запрос возвращает предсказуемый результат, накуя он нужен форуму не ведомо
|
|||
20
фобка
26.03.15
✎
12:09
|
Хотя на выходе если субд простила группировку останется только id. Значит ненужен
|
|||
21
DrZombi
гуру
26.03.15
✎
12:21
|
(0) >>> Как он узнает какие данные надо выбрать из таблицы "с"
Вот этот вопрос самый бесполезный. Я бы поинтересовался, что за Таблица C. Название какое-то фейковое. Да и сам запрос без связей, так что Избыточность информации там на высоте :) |
|||
22
DrZombi
гуру
26.03.15
✎
12:24
|
+(21) Судя по тому, что в условии нет работы с таблицей "С". То там будут все данные со всеми данными из таблиц "m" и "i" :)
|
|||
23
rsv
26.03.15
✎
12:25
|
(0) Limit Постгри штоль ?
|
|||
24
DrZombi
гуру
26.03.15
✎
12:27
|
+(0) Limit 1000
http://myrusakov.ru/sql-limit.html По сути, запрос не отражает полноты информации. Если к примеру в таблице "C" окажется 500 записей, то есть большая вероятность не увидеть всю информацию, т.к. из таблиц "m" и "i" информация будет удваиваться :) |
|||
25
DrZombi
гуру
26.03.15
✎
12:28
|
+(0)На кого учишься? Что за тестовое задание выполняешь? :)
Какую книжку читаешь? ;) |
|||
26
Супер король
26.03.15
✎
12:32
|
(25) На радиоэлектронщика.
Задание не тестовое, а практическое по лаботаторке. Читаю Кухлинга. |
|||
27
rsv
26.03.15
✎
12:35
|
(26) Лучше ANSI т.к. он не зависим от СУБД.
|
|||
28
rsv
26.03.15
✎
12:36
|
+(27) А опосля Расширения MySQL к ANSI SQL92
|
|||
29
Ёпрст
26.03.15
✎
12:38
|
(16) в этом - да
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |