Сравнение двух таблиц с разными значениями - PullRequest
0 голосов
/ 31 октября 2019

У меня есть две таблицы в разных БД на одном и том же сервере ... с несколькими столбцами в SQL.

Мне нужно получить записи, в которых значение одного из столбцов, которые я использую, присутствует в TableAа не в таблице B. Этот столбец является буквенно-цифровым (BIGINT) в TableA, в то время как он отличается от TableB, это ShortDescription (varchar (100))

Значение столбца TableB ТОЛЬКО числа такие же, как столбец таблицы A, но без символов (например, 123), в то время какЗначение столбца TableA может содержать, например, «ab123»

Теперь, если значение «abc123» в TableA присутствует в таблице A, а значение «123» отсутствует в таблице B, то я должен получить эту запись из таблицы A. Если в таблице B для этого столбца присутствует 123, то мне не следует извлекать.

Как это сделать?

Ответы [ 2 ]

0 голосов
/ 31 октября 2019

Вам нужно PATINDEX, чтобы найти числа из TableA.Column1, а затем сопоставить их с TableB.Column2. Ниже приведен запрос для вас:

Выберите столбец 1 ИЗ таблицы A, ГДЕ ЕСТЬ (ВЫБЕРИТЕ 1 ИЗ таблицы B, ГДЕ ПОДСТРОЙКА (CAST (Column1 AS VARCHAR), PATINDEX ('% [0-9]%', CAST (Column1 AS)VARCHAR)), LEN (Column1)) = Column2)

Я предполагаю, что у вас нет общего столбца между двумя таблицами. В противном случае вы можете использовать общий столбец для объединения и поместить оператор PATINDEX в предложение WHERE.

0 голосов
/ 31 октября 2019

Попробуйте этот запрос. Это упрощает задачу, объединяя две таблицы, а затем используя предложение WHERE. Я просто назову общий столбец между двумя таблицами «Id» для объединения:

SELECT * FROM TableA 
LEFT JOIN TableB ON TableA.Id = TableB.Id 
WHERE TableA.Column1 = "ab123" AND TableB.ShortDescription != "123";
...