Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Проблема с JOINом двух таблиц с повторяющимися значениями / 9 сообщений из 9, страница 1 из 1
06.01.2021, 20:24
    #40033926
Jamisman
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с JOINом двух таблиц с повторяющимися значениями
Добрый вечер.
Есть две таблицы:

n | k |
1 | 1 |
2 | 1 |
3 | 3 |
4 | 2 |
5 | 2 |
6 | 5 |

k | p
1 | 59
1 | 69
2 | 79
2 | 89
3 | 75
6 | 99


Нужно получить объединение таблиц по k, но если элемента нет во второй таблице, то получить null.
Правильное решение:
n | k | p
1 | 1 | 59
2 | 1 | 69
3 | 3 | 75
4 | 2 | 79
5 | 2 | 89
6 | null | null

У меня получается только запрос с использованием (left join) в котором поля, где k повторяется, дублируются по всем значениям p например начало выглядит так:
n | k | p
1 | 1 | 59
2 | 1 | 59
1 | 1 | 69
2 | 1 | 69
...
6 | null | null

Подскажите пожалуйста как правильно построить запрос.
...
Рейтинг: 0 / 0
06.01.2021, 20:29
    #40033927
londinium
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с JOINом двух таблиц с повторяющимися значениями
В Вашей постановке для вот этого
k | p
1 | 59
1 | 69
какое р брать при к=1
...
Рейтинг: 0 / 0
06.01.2021, 20:31
    #40033929
Jamisman
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с JOINом двух таблиц с повторяющимися значениями
В этом и проблема, что для первой единицы в результирующей таблице брать 59, для второй единицы 69.
В таблице с правильным решением привел какие значения требуется получить.
...
Рейтинг: 0 / 0
06.01.2021, 21:02
    #40033937
londinium
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с JOINом двух таблиц с повторяющимися значениями
у меня получилось примерно похожее

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
WITH TABLE1(N,K)AS
(
  
   SELECT 1, 1 
     UNION ALL
   SELECT 2, 1 
     UNION ALL
   SELECT 3 , 3 
     UNION ALL
   SELECT 4 , 2 
     UNION ALL
   SELECT 5 , 2 
     UNION ALL
   SELECT 6 , 5  
),
TABLE2(K,P)AS
(
  SELECT 1 , 59
    UNION ALL
  SELECT 1 , 69
    UNION ALL
  SELECT 2 , 79
    UNION ALL
  SELECT 2 , 89
    UNION ALL
  SELECT 3 , 75
    UNION ALL
  SELECT 6  ,99
),
T1_1 AS
(  
  SELECT T1.N,T1.K,
  ROW_NUMBER()OVER(PARTITION BY T1.K ORDER BY K ASC)AS XCOL
  FROM TABLE1 T1
),
T2_1 AS
(
  SELECT T2.K,T2.P,
  ROW_NUMBER()OVER(PARTITION BY T2.K ORDER BY T2.P DESC)AS XCOL
  FROM TABLE2 AS T2
)
SELECT X.N,X.K,Y.P
FROM T1_1 AS X
LEFT JOIN T2_1 AS Y ON X.K=Y.K AND X.XCOL=Y.XCOL
ORDER BY X.N,X.K
...
Рейтинг: 0 / 0
06.01.2021, 22:21
    #40033952
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с JOINом двух таблиц с повторяющимися значениями
Jamisman,

ваши условия недостаточны. Во вторую таблицу необходимо добавить столбец n для формирования внешнего ключа.
...
Рейтинг: 0 / 0
07.01.2021, 00:29
    #40033968
Jamisman
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с JOINом двух таблиц с повторяющимися значениями
londinium, спасибо большое, кажется понял ход мысли с добавлением ключа во вторую таблицу
...
Рейтинг: 0 / 0
07.01.2021, 00:30
    #40033969
Jamisman
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с JOINом двух таблиц с повторяющимися значениями
Владислав Колосов,
Таковы условия задачи, увы
Попробую сделать с добавлением ключа
...
Рейтинг: 0 / 0
07.01.2021, 11:28
    #40034001
Alex_Toms
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с JOINом двух таблиц с повторяющимися значениями
Вариант примера от londinium:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
WITH TABLE1(N,K)AS
(
  
   SELECT 1, 1 
     UNION ALL
   SELECT 2, 1 
     UNION ALL
   SELECT 3 , 3 
     UNION ALL
   SELECT 4 , 2 
     UNION ALL
   SELECT 5 , 2 
     UNION ALL
   SELECT 6 , 5  
),
TABLE2(K,P)AS
(
  SELECT 1 , 59
    UNION ALL
  SELECT 1 , 69
    UNION ALL
  SELECT 2 , 79
    UNION ALL
  SELECT 2 , 89
    UNION ALL
  SELECT 3 , 75
    UNION ALL
  SELECT 6  ,99
)
SELECT ROW_NUMBER()OVER(ORDER BY T1.N) N, T2.K, P 
FROM (SELECT MIN(N) N, K FROM TABLE1 GROUP BY K) T1
LEFT JOIN TABLE2 T2 ON T1.K=T2.K
...
Рейтинг: 0 / 0
07.01.2021, 13:34
    #40034025
Jamisman
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с JOINом двух таблиц с повторяющимися значениями
Alex_Toms, londinium, огромное спасибо, максимально понятно, разобрался в решении.

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


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