我使用以下命令创建了一个表:
CREATE TABLE SpatialInfo (ItemID Integer NOT NULL, Latitude decimal(9,6) null, Longitude decimal(9,6) null) ENGINE=MyISAM;
INSERT INTO SpatialInfo (ItemID, Latitude, Longitude)
VALUES
(
(SELECT ID AS ItemID from Item WHERE ID IS NOT NULL and Latitude IS NOT NULL and Longitude IS NOT NULL),
(SELECT Latitude from Item),
(SELECT Longitude from Item)
);
表项目有以下描述:
+-------------+---------------+------+-----+---------------------+----------------------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+---------------+------+-----+---------------------+-----------------------------+
| ID | int(11) | NO | PRI | NULL | |
| Name | varchar(300) | NO | | NULL | |
| Currently | decimal(8,2) | NO | | NULL | |
| Buy_price | decimal(8,2) | YES | | NULL | |
| First_bid | decimal(8,2) | NO | | NULL | |
| Number_bids | int(11) | YES | | NULL | |
| Latitude | decimal(9,6) | YES | | NULL | |
| Longitude | decimal(9,6) | YES | | NULL | |
| Location | varchar(60) | YES | | NULL | |
| Country | varchar(60) | YES | | NULL | |
| Start | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
| End | timestamp | NO | | 0000-00-00 00:00:00 | |
| SellerID | varchar(60) | NO | MUL | NULL | |
| Description | varchar(4000) | YES | | NULL | |
+-------------+---------------+------+-----+---------------------+-----------------------------+
我注意到的一件事是,如果表Item中的ID为NULL,则默认值为NULL。但是,ID是主键,因此不可能为NULL。
当我运行INSERT INTO SpatialInfo命令时,mysql给了我这个错误:
ERROR 1048 (23000): Column 'ItemID' cannot be null
我想知道如何解决这个问题。
答案 0 :(得分:2)
您的错误可能是由于item
表中有多行,因此子查询返回多行。试着这样做:
INSERT INTO SpatialInfo (ItemID, Latitude, Longitude)
SELECT ID AS ItemID, Latitude, Longitude
from Item
WHERE ID IS NOT NULL and Latitude IS NOT NULL and Longitude IS NOT NULL;
我不确定你为什么会遇到这个特殊的错误。我希望更多的东西更像是“在预期的情况下返回多行”。
答案 1 :(得分:0)
Null表示缺席值,或者我们可以说它未知。因此,您可以拥有多个字段为空的记录。即使您已指定为主键字段。 因此,请务必在主键字段上使用NOT NULL。