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 필요 소스 및 목표 테이블 경기에서 데이터 형식을. 주어진 테이블 컬럼의 데이터 유형이 일치하지 않는 경우 (예 : 삽입하는 시도 VARCHARINT, 또는 TINYINTINTMySQL 서버가 발생합니다) 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.