试图将数据列插入mySQL表

时间:2012-08-16 02:10:24

标签: mysql select insert

我正在使用带有连接的select语句来尝试将列插入到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'

我错过了什么?

3 个答案:

答案 0 :(得分: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子句中而不在外部查询中。相反,它在另一个子查询中。此引用是超出上下文的,这会导致您的错误。

答案 1 :(得分: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;

答案 2 :(得分: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;

您的更新查询看起来很复杂,请尝试简单一点

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