2016-04-17 2 views
2

Может кто-нибудь помочь мне в понимании этого кода SQL? Это то, что на самом деле смущает меня больше - КОНЕЦ = G.CODEНужна помощь при понимании этого SQL-запроса

SELECT something, something 
FROM ABCD A 
JOIN GHIJ G ON 
    CASE  
     WHEN A.CODE = 'not available' THEN 'NA_CODE' 
     ELSE A.CODE END = G.CODE 
        LEFT JOIN PRODUCT P ON P.ID = A.ID 
        WHERE P.ID IS NULL; 
GO   

Благодаря Иша

+0

извините, я сделал это сейчас – Newbie

+1

@ RanchiRhino Спасибо! – Newbie

ответ

3

Когда вы смотрите на отформатирован код, вы поймете это.

CASE WHEN A.CODE = 'not available' THEN 'NA_CODE' ELSE A.CODE END = G.CODE 

рассмотреть присоединиться пункт как

B.XYZ = G.CODE 

Где B.XYZ является сазом для управления объединением столбца A.CODE для значений «не доступно» для 'NA_CODE' так, чтобы он мог соответствовать такому же значению в G.CODE. За исключением значения «не доступно» все в порядке, поэтому оператор case обрабатывает «не доступно» до 'NA_CODE', так что предложение join может соответствовать ему со значением внутри G.CODE.

Ищите отчет о случаях для более подробной информации.

Надеюсь, вы поняли.

Здесь: -

B.XYZ =[CASE WHEN A.CODE = 'not available' THEN 'NA_CODE' ELSE A.CODE END]

+0

Я думаю, что вы боретесь с утверждением case, у него есть начало с CASE и заканчивается END между CASE .... END каждый calucaltion выдается как одно значение столбца. – RanchiRhino

+0

миллионов благодаря вам человек. Я действительно боролся с этим кодом из дней. Вы спаситель :) – Newbie

+0

welcome @IshaGupta .... :-) – RanchiRhino

1

Существует больше вы должны понимать в этом запросе.

Вы получили хороший ответ для «CASE ... END = G.CODE» - действительно, точка в том, что «END» не существует сам по себе, это последнее ключевое слово в синтаксисе выражения CASE ,

Отметив это, обратите внимание, что в вашем запросе не будет строк. Это происходит потому, что в конце у вас есть

...LEFT JOIN PRODUCT P ON P.ID = A.ID 
    WHERE P.ID IS NULL 

Ряды с P.ID «IS NULL» не возвращаются в LEFT JOIN - только те строки, где P.ID = A.ID и строки, в которых A.ID является NULL возвращаются. (Когда значение PID равно NULL, равенство с A.ID НЕИЗВЕСТНО, поэтому строка НЕ ​​возвращается.)

+0

эй, спасибо, я получил ваше мнение, но мы пытаемся вставить новые записи из таблицы A в таблицу P, поэтому, когда в таблице A есть новые записи, которые еще не находятся в таблице P, этот запрос должен работать правильно? Мой запрос на самом деле является INSERT INTO A, SELECT SOMETHING SOMETHING ........... – Newbie

+0

Трудно сказать, не видя ваш фактический код; Я склонен сказать «НЕТ», так как выбор оценивается, прежде чем вы попадете в какую-либо часть «вставки». Опубликуйте всю инструкцию INSERT, если вам нужна помощь. – mathguy

+0

ВСТАВИТЬ в продукт GLOBALID ТИП БЛОК ЦВЕТ КОД ВЫБОР \t \t A.GLOBALID A.TYPE А.Блока A.Color G.CODE ОТ ABCD A РЕГИСТРИРУЙТЕСЬ GHIJ G ПО ПРИ КОГДА A.CODE = 'не доступно' THEN 'NA_CODE' ELSE A.CODE END = G.CODE LEFT JOIN PRODUCT P ON P.ID = A.ID WHERE P.ID NULL; GO – Newbie

Смежные вопросы