Помогите переделать запрос SQL

Тема в разделе "Базы данных", создана пользователем QuZ, 13 сен 2017.

Модераторы: latteo
  1. QuZ

    QuZ Постоялец

    Регистр.:
    18 июл 2009
    Сообщения:
    87
    Симпатии:
    49
    Добрый день.
    Имеется SQL

    Код:
    INSERT INTO t3 (old, new)
    SELECT CASE flag WHEN 1 THEN COLUMN_NAME ELSE '' END,
           CASE flag WHEN 2 THEN COLUMN_NAME ELSE '' END
    FROM ( SELECT COLUMN_NAME, SUM(CASE TABLE_NAME
                                   WHEN 't1' THEN 1
                                   WHEN 't2' THEN 2
                                   END) flag
           FROM INFORMATION_SCHEMA.COLUMNS
           WHERE TABLE_SCHEMA = 'my_database'
             AND TABLE_NAME IN ('t1', 't2')
           GROUP BY COLUMN_NAME
           HAVING flag < 3
         ) dummy
    Помогите пожалуйста на основе него сделать вставку в t3 в колонку value - название колонки, какой не хватает в одной из таблиц и в колонку status - 1 или 2 - в зависимости от того, в какой таблице найдено.

    Спасибо.
     
  2. ТинькоффЯ

    ТинькоффЯ Писатель

    Регистр.:
    10 апр 2013
    Сообщения:
    5
    Симпатии:
    2
    Для составления запроса структура таблиц 't1' и 't2' должна быть известна. Что значит "название колонки, какой не хватает в одной из таблиц"?
     
  3. nullermaster

    nullermaster Писатель

    Регистр.:
    25 сен 2017
    Сообщения:
    2
    Симпатии:
    3
    Код:
    INSERT INTO t3 (name, table)
    select  COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS t1 where COLUMN_NAME not in
    (SELECT t1.COLUMN_NAME
    FROM INFORMATION_SCHEMA.COLUMNS t1
    JOIN INFORMATION_SCHEMA.COLUMNS t2
    ON t1.COLUMN_NAME = t2.COLUMN_NAME
    AND t2.TABLE_NAME = 'table2'
    AND t2.TABLE_SCHEMA = database()
    WHERE t1.TABLE_NAME = 'table1'
    AND t1.TABLE_SCHEMA = database() ),1 ;

    и так же для второй