SELECT로 삽입


287

select를 사용하여 삽입하는 쿼리가 있습니다.

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
고마워요 삽입 선택을 사용하면 필드 이름 주위에 괄호가 필요하지 않습니다. 그러나 선택 위에 값을 지정하기 시작하면 필드 이름 주위에 ()가 필요합니다.
— Kyle

insert 절에서 별칭을 사용할 수 없다는 점에 유의하십시오. "INSERT INTO 코스 t1 (t1.name, t1.location, t1.gid) [...]이 실패합니다.
— raphael

@Andrew 다음에 select를 실행하지 않고 동일한 선택을 반환하는 방법이 있습니까? 나는 삽입 과정 테이블의 결과를 얻으려면
— 타하 술탄 TEMURI을

1
@TAHASULTANTEMURI 다른 질문. 그러나 당신이 요구하는 것을 이해하면 SQL Server (요청한 것이 아니라 요즘 사용하는 것)에 OUTPUT절이 있어서 다른 테이블에 삽입 한 것을 넣을 수 있습니다. MySQL에는 동등한 것이 없다고 생각합니다. 당신은 수있는 임시 테이블을 만들고 채우는 다음, 해당 테이블에 선택, courses당신이 필요로 어떤 다른 사람을 위해 임시 테이블을 사용하여, 해당 테이블에서.
— Andrew

31

그렇습니다. 당신은 쓸 수 있습니다 :

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

또는 select의 다른 조인에서 값을 얻을 수 있습니다 ...


INSERT INTO 코스 이름, 위치, gid SELECT 이름, 위치, 코스에서 FROM cid = $ cid-오류가 발생합니다. SQL 구문에 오류가 있습니다. 1 행의 'name, location, gid SELECT name, location,'22 'FROM course where where cid = 23'at line 1
— Kyle

귀하의 gid 필드가 정수이므로 '22'는 22 여야합니다. '$ this-> gid'를 $ this-> gid로 변경
— Alex Reche Martinez

22와 '22'는 SQL에 중요하지 않지만 필드가 고유 식별자와 유사한 경우 문자열을 넣습니다.
— Dumitrescu Bogdan

8

올바른 구문 : 맞춤법 선택이 잘못되었습니다

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

5

물론, gid에 무엇을 사용 하시겠습니까? 정적 값, PHP var, ...

정적 값 1234는 다음과 같습니다.

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


1

물론 당신은 할 수.

: 한 가지 그러나 주목해야한다 INSERT INTO SELECT다른 테이블에 문을 복사 한 테이블에서 데이터를 삽입하여 AND 필요 소스 및 목표 테이블 경기에서 데이터 형식을. 주어진 테이블 컬럼의 데이터 유형이 일치하지 않는 경우 (예 : 삽입하는 시도 VARCHAR로 INT, 또는 TINYINT에 INTMySQL 서버가 발생합니다) 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())은 테이블에 동일한 테이블 열에 다른 문자 집합이있는 경우 매우 유용합니다 (올바로 처리하지 않으면 데이터가 손실 될 수 있음).


당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.