#sql #sql-server
Вопрос:
Я пытаюсь создать оператор sql, в котором есть как оператор «с», так и оператор «отбросить», но, похоже, он не может заставить его работать. Я пробовал ставить drop как перед, так и после оператора «с», но это всегда приводит к синтаксической ошибке. Неужели нет никакого способа достичь этого?
with cte as (
select abc from temp1
union all
select abc from temp2)
drop table if exists TMP.dummy_table
SELECT cte.abc, tb.id, tb.name
into TMP.dummy_table
from cte
join tableEmployee tb on cte.abc = tb.abc
Запрос-это фиктивный запрос, но он показывает, что я пытаюсь сделать. Не могли бы вы все, пожалуйста, помочь мне с этим.
Комментарии:
1. Не могли бы вы, пожалуйста, сказать мне, что не так с этим вопросом. почему проголосовали против
2. С моей точки зрения, вопрос в порядке вещей. Вероятно, кто-то, хорошо разбирающийся в SQL, подумал, что это тривиальная проблема…
3. Прекратите применять шаблон, который обычно является плохой привычкой — использование.. в …>, чтобы создать своего рода временную рабочую таблицу.
4. Не могли бы вы, пожалуйста, пояснить, что вы подразумеваете под рисунком здесь
Ответ №1:
С/SELECT-это один оператор, и, поскольку ваш оператор DROP прерывается, это создает синтаксическую ошибку. Поскольку вы используете удаленную таблицу в запросе, вам необходимо переместить оператор DROP перед запросом. Убедитесь, что у вас есть ; в конце УДАЛЕНИЯ, иначе синтаксический анализатор выдаст синтаксическую ошибку, когда дойдет до С.
DROP TABLE IF EXISTS TMP.dummy_table;
WITH cte as (
SELECT abc
FROM temp1
UNION ALL
SELECT abc
FROM temp2)
SELECT cte.abc, tb.id, tb.name
INTO TMP.dummy_table
FROM cte
JOIN tableEmployee tb ON cte.abc = tb.abc;
Комментарии:
1. Это требование заставляет меня снова воссоздать таблицу. Я забыл добавить это в заявление. добавил его!
2. @fellowCoder Обновил мой ответ. В принципе, одно и то же.