Кто-нибудь, пожалуйста, поделитесь своим опытом в этом сложном сопоставлении с образцом

Я не уверен, возможно ли это в sql

DDL

DECLARE @MASTERAPP TABLE
 (
     TYPE VARCHAR (50),    
     Respiration_notes VARCHAR (50)
 )

 INSERT @MASTERAPP

 SELECT 'LUNGSLINE',    '20 Inch-OE Size; P-275-55-20; 109S' UNION ALL-- INVALID REMARKS_2 
 SELECT 'LUNGSLINE',    '20 Inch-OE Size; P-275-55-20; 109S' UNION ALL 
 SELECT 'LUNGSLINE',    '20 Inch-Plus Size; P-275-55-20; 113S; 9.5' UNION ALL
 SELECT 'LUNGSLINE',    '20 Inch-Plus Size; Q-888-XX-20; 113S; 9.5;Maleward,bed no 16' -- INVALID Remarks_1_Value


 DECLARE @CHILD TABLE
 (
     TYPE VARCHAR (50),    
     Remarks_1 VARCHAR (50),    
     Remarks_1_Value    VARCHAR (50),
     Remarks_2 VARCHAR (50),    
     Remarks_2_Value VARCHAR (50)
 )

 INSERT @CHILD
    SELECT 'LUNGSLINE',    'LUNGS Metric',    'P-275-55-20',    'LungsService',    '111T' UNION ALL
 SELECT 'LUNGSLINE',    'LUNGS Metric',    'P-275-55-20',    'LungsService',    '117S' UNION ALL
 SELECT 'LUNGSLINE',    'LUNGS Metric',    'P-275-55-20',    'LungsService',    '113S'

Я пытаюсь проверить, содержат ли Respiration_notes правильное значение или нет

Respiration_notes должно содержать то же значение, что и Remarks_1_Value после первой точки с запятой и Remarks_2_Value после второй точки с запятой в Respiration_notes.

Общий ключ между двумя таблицами - Тип.

Оцените ваше предложение.

Выход

'LUNGSLINE',    '20 Inch-OE Size; P-275-55-20; 109S' UNION ALL-- INVALID REMARKS_2_value

'20 Inch-Plus Size; Q-888-XX-20; 113S; 9.5;Maleward,bed no 16' -- INVALID Remarks_1_Value
2
akhrot 26 Фев 2016 в 18:55

2 ответа

Лучший ответ

Я считаю, что это даст вам то, что вам нужно:

SELECT
    MA.TYPE,
    MA.Respiration_notes
FROM
    @MASTERAPP MA
LEFT OUTER JOIN @CHILD C ON
    C.TYPE = MA.TYPE AND
    MA.Respiration_notes LIKE '%; ' + C.Remarks_1_Value + '; ' + C.Remarks_2_Value + '%'
WHERE
    C.TYPE IS NULL

Имейте в виду, что это зависит от точного формата, который используется в ваших примерах. Если между двумя примечаниями вставлен другой текст или если есть дополнительные пробелы и т. Д., То это не сработает. Еще одна причина, по которой такой вид сопоставления текста в лучшем случае ненадежен - он очень хрупкий.

2
Tom H 26 Фев 2016 в 16:31

Вы ищете like. Думаю, это логика:

select ma.*, c.*
from @masterapp ma left join
     @child c
     on ma.Respiration_notes like '[^;]; ' + c.Remarks_1_Value + '; ' + Remarks_2_Value + ';%'
0
Gordon Linoff 26 Фев 2016 в 16:23