2012-08-16 67 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欄是空白的,不填充空值。

我已經嘗試過的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 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 2012-08-18 00:32:55

1

你有幾個問題。

在您的第一個更新查詢中,問題是trip_id是主鍵,但沒有得到默認值。這應該聲明爲auto_increment,以便您可以輕鬆插入新值。在CREATE TABLE語句應該是這樣的:

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

你可以用ALTER TABLE語句解決這個問題,是這樣的:

ALTER TABLE trips_last_arrival_time CHANGE trip_id trip_id UNSIGNED NOT NULL AUTO_INCREMENT; 

與更新語句的問題是不同的。格式化,所以我可以讀取它:

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 
       ) 

WHERE子句引用表,min_arrival_time,這不是在FROM子句中,而不是在外部查詢。相反,它在另一個子查詢中。該引用不在上下文中,這會導致您的錯誤。

+0

戈登,感謝你的洞察。我將根據您的意見對此進行一些修改,我會盡快與您聯繫。我很欣賞爲什麼更新失敗的見解。 – Harry 2012-08-19 17:05:43

0

在我看來,你已經設置trip_id如表trips_last_arrival_time的主鍵不能是null,沒有默認值。你是否手動生成自己的trip_id?如果沒有,請將您的trip_idAUTO_INCREMENT更新爲每次插入新記錄時,服務器會自動爲您生成trip_id。確保如果將該列設置爲AUTOINCREMNT,則其數據類型應爲int

ALTER TABLE trips_last_arrival_time CHANGE trip_id UNSIGNED AUTO_INCREMENT; 

您更新查詢看起來很複雜,嘗試simplying這一點更好

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