|
Составить запрос без временных таблиц и вложенных запросов | ☑ | ||
---|---|---|---|---|
0
DTX 4th
21.01.16
✎
14:08
|
Есть две таблицы А и В. У B есть табличная часть B.rows
Реквизиты А: id Реквизиты B: id type Реквизиты B.rows: b_id a_id sum Как составить запрос, который к таблице А присоединит левым соединением B.rows, у которых type = 0? |
|||
1
ДенисЧ
21.01.16
✎
14:13
|
А что, за временные таблицы и вложенные запросы тебя расстреляют?
|
|||
2
FIXXXL
21.01.16
✎
14:15
|
условие на rows.Ссылка.type
|
|||
3
FIXXXL
21.01.16
✎
14:16
|
(2) ну и соединение А с ТабЧастью В
|
|||
4
kosts
21.01.16
✎
14:19
|
Ну и соединяй последовательно левым соединением все три таблицы
|
|||
5
asady
21.01.16
✎
14:25
|
select
A.id, BRows.b_id, BRows.a_id, BRows.sum, B.type from A as A left join B.Rows as BRows inner join B as B on BRows.b_id=D.id and B.type=0 on A.id = BRows.a_id |
|||
6
DTX 4th
21.01.16
✎
14:27
|
(1) Вопрос на подумать.
Методом тыка я дошёл до
Но не очень понимаю, как он работает. Вроде сначала должны приджойнится все строки B.rows, а потом не все строки B.. Но почему-то строки B.rows с B.rows.b_id.type <> 0 пропадают |
|||
7
DTX 4th
21.01.16
✎
14:29
|
(5) Хм.. После join может не идти ON?
|
|||
8
DTX 4th
21.01.16
✎
14:34
|
(5) И inner join будет относится таблица A LEFT JOIN B.rows? В выборке не пропадут строки А, которых нет в B.rows?
|
|||
9
FIXXXL
21.01.16
✎
14:37
|
отбери во временную таблицу из В по условию, приладь сбоку А
|
|||
10
FIXXXL
21.01.16
✎
14:37
|
(9) сорри, нельзя временные :)
|
|||
11
DTX 4th
21.01.16
✎
14:37
|
(9) Хочется понять, можно ли обойтись без временных таблиц.
|
|||
12
f_vadim
21.01.16
✎
14:41
|
(11) для понимания покури декартово произведение, посмотри результаты джойнов по условию ON true.
|
|||
13
asady
21.01.16
✎
14:42
|
(7) как видишь! эта запиь не противоречит синтаксису t-sql
(8) inner join относиться только к связи B.rows и B все записи из A будут в результирующей таблице |
|||
14
DTX 4th
21.01.16
✎
14:49
|
(12) Что такое декартово произведения, я в курсе. Но при чем тут это?
(13) Т.е. порядок ON на результат не влияет? >inner join относиться только к связи B.rows и B Это потому что он идёт после left join B.rows? Или из-за условия ON? |
|||
15
f_vadim
21.01.16
✎
14:51
|
(14) >>Что такое декартово произведения, я в курсе. Но при чем тут это?
при всём. уточняю - декартово произведение таблиц |
|||
16
f_vadim
21.01.16
✎
14:53
|
курсач что ли пишешь?
|
|||
17
asady
21.01.16
✎
14:54
|
(14) inner join относится к связи B.Rows и B потому что между ними ключевое слово inner join
|
|||
18
DTX 4th
21.01.16
✎
15:05
|
(16) Не, просто сайтец.
(17) Ладно, примерно понятно.. Дома буду пробовать. Спасибо! |
|||
19
DTX 4th
22.01.16
✎
00:35
|
(5) (13) Фокус с перестановкой ON не прокатил.. Unknown column in ON clause.
Inner join тоже потёр некоторые строки A.. |
|||
20
asady
22.01.16
✎
08:07
|
(19) мускул? постгри? скуль какой?
можно и переделать: select A.id, Bt.b_id, Bt.a_id, Bt.sum, Bt.type from A as A left join (select BRows.b_id, BRows.a_id, Brows.sum, B.type from B.Rows as BRows inner join B as B on BRows.b_id=B.id and B.type=0) as Bt on A.id = Bt.a_id но в варианте (5) должно было работать в большинстве скулей |
|||
21
los_hooliganos
22.01.16
✎
08:14
|
Недорос еще до cross join
|
|||
22
HardBall
22.01.16
✎
10:33
|
(20) Вложенный запрос же
|
|||
23
DTX 4th
22.01.16
✎
12:01
|
(20) Вчера же хотел написать...
Вроде MySQL community server 5.0 (21) Для того и тема. |
|||
24
asady
22.01.16
✎
15:44
|
(23) запрос в (5) успешно проходит проверку синтаксиса
на сайте http://ru.piliapp.com/mysql-syntax-check/ как впрочем и запрос из (20) |
|||
25
DTX 4th
22.01.16
✎
23:07
|
(24) Судя по всему, не всё он проверяет.
5.5.25 - MySQL Community Server (GPL) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |