尝试将数据列插入到mySQL表中
我正在使用带连接的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'
我错过了什么?
您试图在现有行上插入(因为您试图选择它而存在)。无论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;
你有几个问题。
在您的第一个更新查询中,问题是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子句中,而不是在外部查询。相反,它在另一个子查询中。该引用不在上下文中,这会导致您的错误。
戈登,感谢你的洞察。我将根据您的意见对此进行一些修改,我会尽快与您联系。我很欣赏为什么更新失败的见解。 – Harry 2012-08-19 17:05:43
在我看来,你已经设置trip_id
如表trips_last_arrival_time
的主键不能是null
,没有默认值。你是否手动生成自己的trip_id
?如果没有,请将您的trip_id
列AUTO_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
水稻,非常感谢!这做到了。 – Harry 2012-08-18 00:32:55