SQL для объединения таблиц после конкатенации - PullRequest
0 голосов
/ 02 мая 2018

У меня есть две таблицы, Таблица A и Таблица B.

Таблица A

Col1
----------
one.1.1
two.2.2
three.2.2
one.1
one.3

Таблица B

| Col1   | Col2 | Col3 |
+----------------------+
| one    | 1    | 1    |
| two    | 2    | 2    |
| three  | 2    | 1    |
| three  | 2    | 2    |

Мне нужно левое соединение, в котором оно отображает значения, которые присутствуют в таблице A, но отсутствуют в таблице B. Мне нужно объединить столбцы таблицы B, они могут быть как в форматах "Col1.Col2" или "Col1.Col2.Col3"

Вот мой запрос:

SELECT Col1
FROM TableA AS A 
    LEFT JOIN TableB AS B ON A.Col1 = B.Col1+'.'+B.Col2+'.'+B.Col3
WHERE A.Col1 IS NOT NULL
     AND B.Col1+'.'+B.Col2+'.'+B.Col3 IS NULL

Ответы [ 2 ]

0 голосов
/ 02 мая 2018

Этот запрос MySQL ( SQLFiddle ) будет делать то, что вы хотите. Обратите внимание, что в MySQL вы используете CONCAT или CONCAT_WS для объединения строк. Также обратите внимание, что вам нужно только проверить, является ли B.col1 NULL.

SELECT A.Col1
FROM TableA A
LEFT JOIN TableB B
ON A.Col1 = CONCAT_WS('.', B.Col1, B.Col2, B.Col3) OR
   A.Col1 = CONCAT_WS('.', B.Col1, B.Col2)
WHERE B.Col1 IS NULL

Выход:

Col1
one.3
0 голосов
/ 02 мая 2018

Если вы используете столбец левой объединенной таблицы, в котором условие выполняет эту работу как внутреннее объединение ... оставьте условие в условии

В вашем случае вам нужны строки, которые не совпадают, просто используйте их

SELECT Col1 FROM TableA AS A 
LEFT JOIN TableB as B ON A.Col1 = B.Col1+'.'+B.Col2+'.'+B.Col3   
WHERE B.Col1+'.'+B.Col2+'.'+B.Col3 IS NULL
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...