2012-08-16 2 views
0

조인과 함께 select 문을 사용하여 열을 mySQL 데이터베이스 테이블에 삽입하려고합니다.데이터 열을 mySQL 테이블에 삽입하려고합니다.

내 코드 :

insert into trips_last_arrival_time(start_time) 
select min_arrival_time.start_time 
from min_arrival_time 
      inner join trips_last_arrival_time 
      on min_arrival_time.trip_id = trips_last_arrival_time.trip_id; 

나는 점점 오전 :

[Err] 1364 - Field 'trip_id' doesn't have a default value 
trip_id is the primary key of both tables. 

START_TIME 컬럼은 null로 빈 작성되지 않았습니다.

내가 UPDATE 절 너무

update trips_last_arrival_time 
set trips_last_arrival_time.start_time = (
select start_time from min_arrival_time) 
where exists(
select trip_id from trips_last_arrival_time 
where trips_last_arrival_time.trip_id = min_arrival_time.trip_id) 

을 시도하고이 테이블 min_arrival_time에서 열 trip_id가 (실제로는 두 테이블의 기본 키입니다!) 이다 그러나이 UPDATE 절은 저를 준다

:

[Err] 1054 - Unknown column 'min_arrival_time.trip_id' in 'where clause' 

무엇이 누락 되었습니까?

답변

1

기존 행 (선택하려고했기 때문에 존재)에 삽입하려고합니다. trip_id에 기본값이 있는지 여부에 관계없이이 작업은 올바르지 않습니다. 당신은 UPDATE를해야합니다. 제 생각에는

UPDATE trips_last_arrival_time AS t, min_arrival_time AS m 
    SET t.start_time = m.start_time 
    WHERE t.trip_id = m.trip_id; 
+0

벼, 많은 감사합니다! 이것은 그것을했다. – Harry

1

몇 가지 문제가 있습니다.

첫 번째 업데이트 쿼리에서 문제는 trip_id가 기본 키이지만 기본값을 얻지 못하는 것입니다. 이것은 새로운 값을 쉽게 삽입 할 수 있도록 auto_increment로 선언되어야합니다. 만들기 표 문은 무언가 같이해야한다 : 당신은 테이블 변경 문으로이 문제를 해결할 수

trip_id int NOT NULL AUTO_INCREMENT, 
. . . 
primary key (trip_id) 

, 뭔가 같은 : 당신의 업데이트 문을

ALTER TABLE trips_last_arrival_time CHANGE trip_id trip_id UNSIGNED NOT NULL AUTO_INCREMENT; 

문제는 다르다. 절은 테이블, min_arrival_time를 참조한다

update trips_last_arrival_time 
    set trips_last_arrival_time.start_time = (
     select start_time from min_arrival_time) 
    where exists(select trip_id 
       from trips_last_arrival_time 
       where trips_last_arrival_time.trip_id = min_arrival_time.trip_id 
       ) 

(가), 즉 FROM 절 아닌 외부 쿼리의에없는 : 나는 그것을 읽을 수 있도록 포맷. 대신 다른 하위 쿼리에 있습니다. 이 참조는 상황을 벗어난 것이므로 오류의 원인입니다.

+0

고든 simplying보십시오.나는 당신의 의견에 기초하여 이것에 약간의 수정을 테스트 할 것이고, 나는 당신에게 돌아갈 것이다. 업데이트가 실패한 이유에 대한 통찰력에 감사드립니다. – Harry

0

, 당신이 null을하지 않을 수없는 테이블 trips_last_arrival_time의 기본 키로 trip_id을 설정 한 :

하여 업데이트

, 나는 꽤 당신이 할 필요가 확신 기본값. 직접 trip_id을 수동으로 생성합니까? 그렇지 않다면 trip_idAUTO_INCREMENT을 새 레코드를 삽입 할 때마다 매번 새로 작성하면 서버에서 자동으로 trip_id을 생성합니다. 열 AUTOINCREMNT으로 설정하면 해당 데이터 유형은 int이어야합니다.

ALTER TABLE trips_last_arrival_time CHANGE trip_id UNSIGNED AUTO_INCREMENT; 

귀하의 업데이트 쿼리

복잡 보면, 통찰력 주셔서 감사합니다, 그것을 조금 더

UPDATE trips_last_arrival_time a 
      INNER JOIN min_arrival_time b 
       ON a.trip_id = b.trip_id 
SET  a.start_time = b.start_time 
관련 문제