Объясните что выполняет SQL запрос

SQL во всех проявлениях - от ANSI-92 до TSQL.

Модераторы: Yurich, Absurd

Ответить
Pepel777
Сообщения: 1
Зарегистрирован: 15 ноя 2016, 21:42

15 ноя 2016, 21:48

Есть такое задание:

Исправьте ошибки в запросе и объясните, что он выполняет:

Код: Выделить всё

    INSERT INTO TEMP_TABLE (CORP, HOUSE, CUST, CYCLE, UNIQUE_CUSTOMER_PIN, FIRST_NAME, LAST_NAME, PHONE_1,PHONE_2)
    SELECT
        WO.CORP,
        WO.HOUSE,
        WO.CUST,
        CM.CYCLE,
        CM.UNIQUE_CUSTOMER_PIN,
        CM.FNAME,
        CM.LNAME,
    FROM WWWOOO WO
    JOIN CCCMMM CM ON WO.CORP = CM.CORP AND WO.HOUSE = CM.HOUSE AND WO.CUST = CM.CUST 
    LEFT OUTER JOIN SSSDDD ON SD.RPT_COLL_WRITE_OFF_ID = WO.RPT_COLL_WRITE_OFF_ID 
		WHERE SD.RPT_COLL_WRITE_OFF_ID IS NULL
		AND WO.ADD_DT > SYSDATE-10;
Нашел только одну ошибку - не указаны поля, из которых надо брать значения для PHONE_1,PHONE_2. На большее знаний пока не хватает.
Аватара пользователя
AiK
Сообщения: 2273
Зарегистрирован: 13 фев 2004, 18:14
Откуда: СПб
Контактная информация:

16 ноя 2016, 01:00

Давно не брал я в руки шашек :)
Запрос собирает данные в таблицу TEMP_TABLE.
Из 3-х других таблиц. У таблицы SSSDDD не указан алиас, поэтому объединения (JOIN) с алиасом SD очевидно не верны.
Внешние объединения (outer join) емнип интерпретируются в разных диалектах SQL по-разному, так что я бы почитал лекцию.
А так обычно LEFT OUTER JOIN из главной таблицы (WWWOOO) выдаёт все строчки, даже если в присоединяемых таблицах значения отсутствуют.
То есть в резалтсете в колонках от присоединяемых таблиц будет полно нуллов в некоторых строчках.
Даже самый дурацкий замысел можно воплотить мастерски
Ответить