MySQL:null在INSERT和SELECT语句中变为0

我试图做一个INSERT语句使用SELECT查询语句到一个有两列的表(item_id不为null,价格可以为null)。 item_id不是自动递增的,我会从另一个表中进行选择查询。 所以一个例子是:

INSERT INTO myTable 
SELECT ((SELECT id FROM myCatalogue where name="Item X"), "500");

通过单独执行SELECT语句,如果项目X在列表中不存在,则查询将返回:

| SELECT id FROM myCatalogue where name="Item X" | 500 |
| NULL | 500 |

但是,当整个INSERT + SELECT语句中,以下内容被插入到'myTable'中:

| item_id | price |
| 0 | 500 |

当'myCatalogue'中不存在项目时,例如'不能在列item_id中插入值NULL',我希望MySQL提示我出错,因此我可以返回'myCatalogue'来验证此项是否存在。 但它会自动将值从NULL更改为0并成功插入。 因此,我想问一下如何修改语句,使其不会将NULL更改为0?

这是我的表格定义:

CREATE TABLE myTable 
( 
    item_id int(11) unsigned NOT NULL, 
    price float unsigned DEFAULT NULL, 
    PRIMARY KEY (item_id) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 

INSERT INTO myTable 
SELECT id, "500"
FROM myCatalogue
WHERE name = "Item X"

更容易处理。 您可以通过last_insert_id()确认插入是否成功。

你可以尝试:

INSERT INTO myTable 
SELECT id, "500"
FROM myCatalogue
WHERE name = "Item X"
UNION
SELECT NULL, "500"

很明显, id需要启用NULLdefault ,如果它是PRIMARY可能会很困难。 如果你有PRIMARYUNIQUE ,而是想要一个错误,你可以像这样运行:

INSERT INTO myTable 
(   SELECT id, "500"
    FROM myCatalogue
    WHERE name = "Item X")
    UNION
(   SELECT item_id, "500"
    FROM myTable)
    LIMIT 1

只要idPRIMARY ,它就会错误地将你现有的id插入到表中。


我是初学者,理论上是有用的。 这是为MySQL。

INSERT INTO myTable SELECT ((SELECT IFNULL(id,0) as id FROM myCatalogue where name="Item X"), "500");

这是为了mssql。

INSERT INTO myTable SELECT ((SELECT ISNULL(id,0) as id FROM myCatalogue where name="Item X"), "500");

如果不行,那是我的错误。

链接地址: http://www.djcxy.com/p/63801.html

上一篇: MySQL: null becomes 0 in INSERT and SELECT statement

下一篇: How do I pull both categories AND tags from a MySQL Database for an item?