powered by simpleCommunicator - 2.0.28     © 2024 Programmizd 02
Map
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Запрос на связь двух не связуемых таблиц
9 сообщений из 9, страница 1 из 1
Запрос на связь двух не связуемых таблиц
    #40134679
Двоичник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброй ночи всезнающий All

Подскажите, пожалуйста, как связать две таблицы, если в одной из таблиц нет связующих записей.

Пример:
Table1
Код: plaintext
1.
2.
3.
4.
5.
6.
field_key, field_value
1             A
2             B
3             C
4             D
5             E
6             F

Table2
Код: plaintext
1.
2.
3.
field_key, field_value
2             а
3             б
4             в

В итоге нужно получить результат такой:
Код: plaintext
1.
2.
3.
4.
5.
6.
Table1.Field1  Table1.Field2  Table2.Field1  Table1.Field2
1           |  A           |  2           |  а
2           |  B           |  2           |  а
3           |  C           |  3           |  б
4           |  D           |  4           |  в
5           |  E           |  4           |  в
6           |  F           |  4           |  в


Спасибо за помощь
...
Рейтинг: 0 / 0
Запрос на связь двух не связуемых таблиц
    #40134681
Двоичник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL 2019
...
Рейтинг: 0 / 0
Запрос на связь двух не связуемых таблиц
    #40134687
Двоичник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я сделал запрос:

Код: sql
1.
2.
3.
4.
5.
6.
7.
select t1.field_key, t1.field_value, t2.field_key, t2._field_value
from Table1 t1
cross apply (select top 1 * from Table2 t2
where  isnull(t2.field_key,4) <= t1.field_key
order by t2.field_key desc
) t
order by t1.field_key



и я получил только
Код: plaintext
1.
2.
3.
4.
5.
Table1.Field1  Table1.Field2  Table2.Field1  Table1.Field2
2           |  B           |  2           |  а
3           |  C           |  3           |  б
4           |  D           |  4           |  в
5           |  E           |  4           |  в
6           |  F           |  4           |  в

где запись с Table1.Field1 = 1 я потерял, но она нужна
...
Рейтинг: 0 / 0
Запрос на связь двух не связуемых таблиц
    #40134688
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы бы вменяемо описали алгоритм связывания, что ли... а то хрен знает, по какой задумке нужен именно такой результат. Ну и следите, чтобы данные были согласованы, а то имена полей в показанном запросе в принципе не совпадают с таковыми в примере исходных данных.
...
Рейтинг: 0 / 0
Запрос на связь двух не связуемых таблиц
    #40134697
PizzaPizza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Двоичник
если в одной из таблиц нет связующих записей

то вам поможет cross join.

Связи обусловлены архитектурой данных и бизнеслогикой.
Если "нет связующих записей" то нет и мороженого.

Ваш пример выглядит как будто записи просто рандомно объединены
...
Рейтинг: 0 / 0
Запрос на связь двух не связуемых таблиц
    #40134720
Двоичник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PizzaPizza,

Я опечатался, извините. Конечно же так
В итоге нужно получить результат такой:
Код: plaintext
1.
2.
3.
4.
5.
Table1.Field1  Table1.Field2  Table2.Field1  Table2.Field2
2           |  B           |  2           |  а
3           |  C           |  3           |  б
4           |  D           |  4           |  в
5           |  E           |  4           |  в
6           |  F           |  4           |  в

Иными словами, Т1 к Т2 должны связываться по ключевому полю. В тех случаях, когда в Т2 значения в ключевом поле нет, то нужно брать максимальное из Т2 по ключевому полю и размножать запись от Т2 по записям Т1.

Выяснилось, что Table1.field_key = 1 оказывается не нужен.
Запрос выше я написал, но мне не нравится вложенный подзапрос. Это убьёт производительность
...
Рейтинг: 0 / 0
Запрос на связь двух не связуемых таблиц
    #40134767
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Двоичник,

добавьте таблицу связей.
...
Рейтинг: 0 / 0
Запрос на связь двух не связуемых таблиц
    #40134939
PizzaPizza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Двоичник,

я лично не понял

в первой таблице 1/2/3/4/5/6 во второй 2/3/4, как то выкидывается 1 из первой но остается 5 и 6 хотя во второй для всех 1/5/6 нет никакой связи и правило "брать максимальное из Т2" тоже не соблюдено для 1
...
Рейтинг: 0 / 0
Запрос на связь двух не связуемых таблиц
    #40134988
ValK412
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Двоичник,
"Table1.field_key = 1 оказывается не нужен" - его надо выкидывать в запросе или он самоудалится?
Любопытен Ваш запрос (подзапрос), который "убъет производительность". Ведь по Table2.Field1 наверняка есть индекс.
вариант
Код: sql
1.
2.
3.
4.
5.
6.
with t1 as (select * from (values  (1, 'A'),(2, 'B'),(3, 'C'),(4, 'D'),(5, 'E'),(6, 'F'))as t(k,val) )
 ,t2 as (select * from (values  (2, 'а'),(3, 'б'),(4, 'в') )as t(k,val) )
 ,maxT2 as (select k,val from t2 where k=(select max(k) from t2))
select t1.k as k1,t1.val as val1, isnull(t2.k,m.k) as k2, isnull(t2.val,m.val) as val2 from t1
left join t2 on t2.k=t1.k
left join maxT2 m on 1=1


...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Запрос на связь двух не связуемых таблиц
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]