Сравните две таблицы на предмет совпадения значений из соответствующих столбцов и определите отсутствующие записи - PullRequest
0 голосов
/ 06 ноября 2019

У меня есть две таблицы и данные, как показано ниже:

Я хочу сравнить два столбца таблицы "Type and MatchType" и определить идентификаторы первой таблицы, в которой Type отсутствует в MatchType. «Type» и «MatchType» являются единственными общими столбцами в обеих таблицах в случае, если мы можем использовать соединение. Например, значение столбца FirstTable во второй строке соответствует второй строке SecondTable, сравнение должно быть таким, как у FirstTable всегда есть числа, а во второй таблице 2 знака перед одинаковыми числами, поэтому мы должны игнорировать символы и проверять ТОЛЬКО числа, а если обасопоставьте, затем проигнорируйте этот идентификатор из первой таблицы. В приведенном ниже примере данных, приведенных ниже, мои выходные данные должны иметь идентификаторы 1 и 3 из FirstTable, поскольку оба «Типа» этих записей равны NULL или отсутствуют в SecondTable.

CREATE TABLE [dbo].[FirstTable](
    [Id] [int] NOT NULL,
    [Name] [varchar](50) NULL,
    [Type] [varchar](50) NULL
)

CREATE TABLE [dbo].[SecondTable](
    [ID] [int] NULL,
    [Relation] [varchar](50) NULL,
    [MatchType] [nvarchar](50) NULL
)

Id  Name    Type
1   Bam     1234
2   Prish   3433
3   Tomato  4545


ID  Relation    MatchType
1   Sister     NULL
2   Mother     PS3433
3   Nomad      NULL
4   Nothing    PS4322

Ожидаемый результат

Идентификаторы (Из первой таблицы типы соответствующих идентификаторов отсутствуют в MatchType для SecondTable - не забудьте удалить 2 символа впереди взначения MatchType второй таблицы и просто сравните число)

1
3

Я пытался использовать PATINDEX, но, похоже, он не работает или я делаю что-то не так.

1 Ответ

1 голос
/ 06 ноября 2019

Попробуйте

SELECT F.* 
FROM FirstTable F LEFT JOIN (SELECT RIGHT(MatchType,LEN(MatchType)-2) MT FROM SecondTable) S ON F.Type = S.MT  
WHERE S.MT IS NULL

FIDDLE DEMO

...