Соединение по двум столбцам - PullRequest
0 голосов
/ 05 октября 2019

У меня есть две таблицы: table_1:

  NAME VALUES_WANTED
  A-1  value_1
  A-1  value_2
  A-1  value_3
  A-1  value_4
  A-1  value_5
  A-2  value_1
  A-2  value_2
  A-2  value_3
  A-2  value_4
  A-2  value_5

и table_2:

  NAME VALUES   TAGS
  A-1  value_1  a
  A-1  value_2  aa
  A-1  value_3  s
  A-1  value_4  b
  A-1  value_y  e
  A-1  value_x  sd
  A-2  value_1  g
  A-2  value_2  fe
  A-2  value_3  k
  A-2  value_5  m

Я хочу получить следующую таблицу:

  NAME VALUES_WANTED   TAGS
  A-1  value_1         a
  A-1  value_2         aa
  A-1  value_3         s
  A-1  value_4         b
  A-1  value_5         Null
  A-2  value_1         g
  A-2  value_2         fe
  A-2  value_3         k
  A-2  value_4         Null
  A-2  value_5         m

По сути, это что-то вроде поиска TAGS для VALUES_WANTED. Если VALUES_WANTED отсутствует в table_2, он должен вернуть Null для его TAGS.

Я знаю, что мне нужно присоединиться к NAME и VALUES. Пробовал разные способы JOIN, например, следующие, но все равно не получалось ...

SELECT a.NAME, a.VALUES, a.TAGS, s.VALUES_WANTED
FROM table_2 a


RIGHT JOIN table_1 s 
ON a.NAME = s.NAME 
AND a.VALUES = s.VALUES_WANTED

Любая помощь очень ценится.

Ответы [ 2 ]

1 голос
/ 05 октября 2019

Кажется, вы хотите left join в двух столбцах:

SELECT t1.NAME, t1.VALUES_WANTED, t2.TAGS
FROM table_1 t1 LEFT JOIN
     table_2 t2 
     ON t1.NAME = t2.NAME AND t1.VALUES_WANTED = t2.VALUES;

В LEFT JOIN все строки из первой таблицы сохраняются вместе с соответствующими строками из второй таблицы. Кажется, это то, что вы хотите.

Вы можете также написать это, используя RIGHT JOIN, но я не рекомендую - большинству людей легче читать FROM предложение, когда они знают, какие строки необходимы.

Ваша версия близка, но вы не выбираете правильные столбцы. У вас есть a.Name в наборе результатов, но это будет NULL, когда нет совпадения.

1 голос
/ 05 октября 2019

использовать левое соединение

SELECT a.NAME, a.VALUES_WANTED, b.TAGS
FROM table_1 a
left JOIN table_2 b 
ON a.NAME = b.NAME 
AND a.VALUES = b.VALUES_WANTED
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...