|
Соединение трех таблиц | ☑ | ||
---|---|---|---|---|
0
5 Элемент
06.04.12
✎
18:12
|
Есть три связанные таблицы http://screencast.com/t/kQhry8iN2L1
Поля A,B уникальные, С - нет. Необходимо выбрать записи из Т3 и получить соответствующие записи из Т2. Как сделать? Я делаю так, но не знаю правильно или нет Т3 КАК Т3 ЛЕВОЕ СОЕДИНЕНИЕ Т1 КАК Т1 ВНУТРЕННЕЕ СОЕДИНЕНИЕ T2 КАК T2 ПО (T2.B = T1.B) ПО (Т1.A = T3.A) И (T2.B = T1.B) |
|||
1
rs_trade
06.04.12
✎
18:15
|
(0) два левых джойна?
|
|||
2
5 Элемент
06.04.12
✎
18:19
|
Забыл, в Т2 значение поля В может повторятся.
В Т1 значение поля В не повторяется. |
|||
3
mr_K
06.04.12
✎
18:23
|
(2) Для каждого поля В из T1 нужно выбрать одну запись из Т2 или нет. Если да, то какую брать?
|
|||
4
mr_K
06.04.12
✎
18:24
|
и последняя строчка в условиях последнего соединения явно лишняя.
|
|||
5
5 Элемент
06.04.12
✎
18:25
|
(3) нужно для каждой строки из Т3 получить одну строку из Т2
|
|||
6
5 Элемент
06.04.12
✎
18:30
|
Т1:
А | В ------ 1 | 1 2 | 2 3 | 3 Т2: В | С ------ 1 | 1 2 | 1 3 | 1 Т3: А | C ------ 1 | 1 2 | 1 3 | 1 Нужно получить: А | В | C ----------- 1 | 1 | 1 2 | 2 | 1 3 | 3 | 1 |
|||
7
5 Элемент
06.04.12
✎
18:33
|
(4) последней строкой я ограничиваю выборку из Т2, т.к. вторым соединением можно получить несколько строк
|
|||
8
rs_trade
06.04.12
✎
18:45
|
declare @t1 table (A int, B int)
insert @t1 values (1, 1), (2, 2), (3, 3) declare @t2 table (B int, C int) insert @t2 values (1, 1), (2, 1), (3, 1) declare @t3 table (A int, C int) insert @t3 values (1, 1), (2, 1), (3, 1) select t3.A, t1.B, t2.C from @t1 as t1 inner join @t2 as t2 on t1.B=t2.b left join @t3 as t3 on t1.A=t3.A |
|||
9
rs_trade
06.04.12
✎
18:46
|
хотя хз. пятниццо вечер. не о работе мысли ))
|
|||
10
vmv
06.04.12
✎
18:47
|
не вникал, но думаю - это варинат Картахэна, т.е. проблема высосана из пальца и задачу можно решить без извратов
|
|||
11
5 Элемент
06.04.12
✎
18:51
|
(8) надо проверить что будет если вот так
declare @t2 table (B int, C int) insert @t2 values (1, 1), (1, 2), (1, 3), (2, 1), (3, 1) думаю что задвоится |
|||
12
5 Элемент
06.04.12
✎
18:57
|
Вот так работает как надо
declare @t1 table (A int, B int) insert @t1 values (1, 1) insert @t1 values (2, 2) insert @t1 values (3, 3) declare @t2 table (B int, C int) insert @t2 values (1, 1) insert @t2 values (1, 2) insert @t2 values (1, 3) insert @t2 values (2, 1) insert @t2 values (3, 1) declare @t3 table (A int, C int) insert @t3 values (1, 1) insert @t3 values (2, 1) insert @t3 values (3, 1) select t3.A, t1.B, t2.C from @t3 as t3 left join @t1 as t1 inner join @t2 as t2 on (t2.b = t1.b) on (t1.a = t3.a) and (t2.c = t3.c) |
|||
13
5 Элемент
06.04.12
✎
18:58
|
(10) реши, в (12) исходные данные таблиц
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |