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

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
Проблема с JOINом двух таблиц с повторяющимися значениями
    #40033927
londinium
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В Вашей постановке для вот этого
k | p
1 | 59
1 | 69
какое р брать при к=1
...
Рейтинг: 0 / 0
Проблема с JOINом двух таблиц с повторяющимися значениями
    #40033929
Jamisman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В этом и проблема, что для первой единицы в результирующей таблице брать 59, для второй единицы 69.
В таблице с правильным решением привел какие значения требуется получить.
...
Рейтинг: 0 / 0
Проблема с JOINом двух таблиц с повторяющимися значениями
    #40033937
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.
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
Проблема с JOINом двух таблиц с повторяющимися значениями
    #40033952
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jamisman,

ваши условия недостаточны. Во вторую таблицу необходимо добавить столбец n для формирования внешнего ключа.
...
Рейтинг: 0 / 0
Проблема с JOINом двух таблиц с повторяющимися значениями
    #40033968
Jamisman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
londinium, спасибо большое, кажется понял ход мысли с добавлением ключа во вторую таблицу
...
Рейтинг: 0 / 0
Проблема с JOINом двух таблиц с повторяющимися значениями
    #40033969
Jamisman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владислав Колосов,
Таковы условия задачи, увы
Попробую сделать с добавлением ключа
...
Рейтинг: 0 / 0
Проблема с JOINом двух таблиц с повторяющимися значениями
    #40034001
Alex_Toms
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вариант примера от 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
Проблема с JOINом двух таблиц с повторяющимися значениями
    #40034025
Jamisman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alex_Toms, londinium, огромное спасибо, максимально понятно, разобрался в решении.

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


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