Odpowiedzi:
Tak, absolutnie, ale sprawdź swoją składnię.
INSERT INTO courses (name, location, gid)
SELECT name, location, 1
FROM courses
WHERE cid = 2
Oczywiście możesz umieścić stałą tego samego typu co gid
na jej miejscu, a nie tylko 1. I właśnie wymyśliłem cid
wartość.
OUTPUT
klauzulę , która pozwala ci umieścić wszystko, co wstawiłeś, również w innej tabeli. Nie sądzę, że MySQL ma odpowiednik. Możesz utworzyć tabelę tymczasową , wybrać tę tabelę, a następnie wypełnić courses
tę tabelę, a następnie użyć tabeli tymczasowej do wszystkiego, czego potrzebujesz.
Tak to jest. Możesz pisać :
INSERT INTO courses (name, location, gid)
SELECT name, location, 'whatever you want'
FROM courses
WHERE cid = $ci
lub możesz uzyskać wartości z innego połączenia wybranego ...
Prawidłowa składnia: wybrana pisownia była niepoprawna
INSERT INTO courses (name, location, gid)
SELECT name, location, 'whatever you want'
FROM courses
WHERE cid = $ci
Jasne, czego chcesz użyć do GID? wartość statyczna, PHP var, ...
Wartość statyczna 1234 może być następująca:
INSERT INTO courses (name, location, gid)
SELECT name, location, 1234
FROM courses
WHERE cid = $cid
Myślę, że twoja instrukcja INSERT jest niepoprawna, zobacz poprawną składnię: http://dev.mysql.com/doc/refman/5.1/en/insert.html
edytuj: jak już zauważył Andrew ...
Oczywiście, że możesz.
Należy jednak zauważyć jedną rzecz: INSERT INTO SELECT
instrukcja kopiuje dane z jednej tabeli i wstawia ją do innej tabeli ORAZ wymaga, aby typy danych w tabelach źródłowej i docelowej były zgodne. Jeśli typy danych z podanych kolumn tabeli nie pasują (tj. Próbują wstawić VARCHAR
do INT
lub TINYINT
do INT
) serwer MySQL wyrzuci SQL Error (1366)
.
Więc uważaj.
Oto składnia polecenia:
INSERT INTO table2 (column1, column2, column3)
SELECT column1, column2, column3 FROM table1
WHERE condition;
Uwaga dodatkowa: Istnieje sposób na obejście problemu wstawiania różnych typów kolumn za pomocą rzutowania w twoim SELECT
, na przykład:
SELECT CAST('qwerty' AS CHAR CHARACTER SET utf8) COLLATE utf8_bin;
Ta konwersja ( CAST()
jest synonimem CONVERT()
) jest bardzo przydatna, jeśli tabele mają różne zestawy znaków w tej samej kolumnie tabeli (co może potencjalnie prowadzić do utraty danych, jeśli nie będzie właściwie obsługiwane).
Odpowiednia składnia dla twojego zapytania to:
INSERT INTO courses (name, location, gid)
SELECT (name, location, gid)
FROM courses
WHERE cid = $cid