ВСТАВИТИ З SELECT


287

У мене є запит, який вставляється за допомогою вибору:

INSERT INTO courses (name, location, gid) 
            SELECT name, location, gid 
              FROM courses 
             WHERE cid = $cid

Чи можливо вибрати лише "ім'я, місцезнаходження" для вставки та встановити gid на щось інше у запиті?

Відповіді:


548

Так, абсолютно, але перевірте свій синтаксис.

INSERT INTO courses (name, location, gid)
SELECT name, location, 1
FROM   courses
WHERE  cid = 2

Можна поставити константу того ж типу, що і gidна її місце, не тільки 1, звичайно. І, я щойно склав cidзначення.


2
Працювали, дуже дякую За допомогою Insert Select круглі дужки навколо імен полів не потрібні. Але коли ви починаєте вказувати значення поверх вибору, мабуть, вам потрібно () навколо імен полів.
Кайл

Зауважте, що ви не можете використовувати псевдоніми в пункті вставки: "ВСТАВИТЬСЯ в курси t1 (t1.name, t1.location, t1.gid) [...] не вдасться.
raphael

@Andrew чи є якийсь спосіб повернути цей самий вибір без запуску select наступного разу? якщо я хочу вставити та отримати результат таблиці курсів
TAHA SULTAN TEMURI

1
@TAHASULTANTEMURI Інше питання. Але якщо я зрозумів, що ви запитуєте, SQL Server (не те, що запитували, а те, що я використовую в ці дні), має OUTPUTзастереження , яке дозволяє вам також помістити все, що ви вставили в іншу таблицю. Я не думаю, що MySQL має еквівалент. Ви можете створити тимчасову таблицю , вибрати її в цю таблицю, а потім заповнити coursesцю таблицю, а потім використати таблицю темпів для всього іншого, що вам потрібно.
Андрій

31

Так. Ви можете написати:

INSERT INTO courses (name, location, gid) 
SELECT name, location, 'whatever you want' 
FROM courses 
WHERE cid = $ci

або ви можете отримати значення з іншого приєднання вибору ...


ВСТАВЛЯЙТЕ ІМЯ курсів, місцезнаходження, gid SELECT ім'я, місцезнаходження, '$ this-> gid' З курсів, де cid = $ cid - я отримую помилку: у вашому синтаксисі SQL помилка; ознайомтеся з посібником, що відповідає вашій версії сервера MySQL, чи правильно використовувати синтаксис, який використовується поруч із 'ім'ям, місцеположенням, ім’ям GEL SELECT, місцеположенням', '22' З курсів, де cid = 23 'у рядку 1
Кайл

Я думаю, що ваше поле gid є цілим числом, тому: "22" має бути 22. Змініть "$ this-> gid" на $ this-> gid
Alex Reche Martinez

22 і '22' не мають значення sql, але я ставлю рядок у випадку, якщо поле схоже на унікальний ідентифікатор.
Думітреску Богдан

8

Правильний синтаксис: вибір орфографії був неправильним

INSERT INTO courses (name, location, gid)
SELECT name, location, 'whatever you want' 
FROM courses 
WHERE cid = $ci 

5

Впевнений, що ти хочеш використовувати для гіду? статичне значення, PHP var, ...

Статичне значення 1234 може бути таким:

INSERT INTO courses (name, location, gid)
SELECT name, location, 1234
FROM courses
WHERE cid = $cid


1

Звичайно, ви можете.

Однак слід зазначити одне: Оператор INSERT INTO SELECTкопіює дані з однієї таблиці та вставляє їх в іншу таблицю І вимагає, щоб типи даних у вихідних та цільових таблицях відповідали. Якщо типи даних із заданих стовпців таблиці не збігаються (тобто намагаються вставити VARCHARв INTабо TINYINTв INT), сервер MySQL видасть SQL Error (1366).

Тож будьте обережні.

Ось синтаксис команди:

INSERT INTO table2 (column1, column2, column3)
SELECT column1, column2, column3 FROM table1
WHERE condition;

Бічна примітка: Існує спосіб уникнути проблеми вставки різних типів стовпців, використовуючи кастинг у SELECT, наприклад:

SELECT CAST('qwerty' AS CHAR CHARACTER SET utf8) COLLATE utf8_bin;

Ця конверсія ( CAST()є синонімом CONVERT()) дуже корисна, якщо ваші таблиці мають різні набори символів у одному стовпчику таблиці (що може потенційно призвести до втрати даних, якщо не оброблятися належним чином).


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.