我正在尝试使用SELECT查询语句将INSERT语句放入具有两列的表中(item_id不为null且price可以为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 |
我希望MySQL在'myCatalogue'中不存在项时提示我错误,例如'无法在列item_id中插入值NULL',这样我就可以返回'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
答案 0 :(得分:0)
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
需要启用NULL
和default
,如果是PRIMARY
则可能会很困难。如果您有PRIMARY
或UNIQUE
但又想要出错,则可以这样运行:
INSERT INTO myTable
( SELECT id, "500"
FROM myCatalogue
WHERE name = "Item X")
UNION
( SELECT item_id, "500"
FROM myTable)
LIMIT 1
只要id
为PRIMARY
,就会在您尝试将现有id
插入表格时出错。
答案 1 :(得分:0)
我是初学者,它在理论上有效。这是为了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");
如果不行,那是我的错。