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

MySQL:INSERT和SELECT语句中null变为0,mysql,select,insert,null,Mysql,Select,Insert,Null,我正在尝试使用SELECT查询语句将INSERT语句插入到一个有两列的表中(item_id不为null,price可以为null)。项目id不是自动递增的,我将从另一个表执行select查询。例如: INSERT INTO myTable SELECT ((SELECT id FROM myCatalogue where name="Item X"), "500"); 通过仅执行SELECT语句,如果列表中不存在项X,查询将返回: | SELECT id FROM myCatalogue w

我正在尝试使用SELECT查询语句将INSERT语句插入到一个有两列的表中(item_id不为null,price可以为null)。项目id不是自动递增的,我将从另一个表执行select查询。例如:

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 INTO myTable 
SELECT id, "500"
FROM myCatalogue
WHERE name = "Item X"
UNION
SELECT NULL, "500"
显然,
id
需要启用
NULL
default
,如果它是
,这可能会很困难。如果您有
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
插入表中时出错

更容易合作。您可以通过确认插入是否成功

您可以尝试以下方法:

INSERT INTO myTable 
SELECT id, "500"
FROM myCatalogue
WHERE name = "Item X"
UNION
SELECT NULL, "500"
显然,
id
需要启用
NULL
default
,如果它是
,这可能会很困难。如果您有
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
插入到表中的事实上出错。

我是初学者,理论上可以。对于
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");

希望这对你有帮助

我是初学者,从理论上讲可以。对于
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");


希望这对你有帮助

显示创建表myTable??我认为您的item_id的默认值为0。欢迎来到MySQL的精彩世界。它认为它比你更清楚你想要什么。请参见此处了解详细信息:Hi a_horse_和_no_名称,这是一个很好的建议,但我不允许触摸任何其他表,除非我可以仅在“myTable”上设置严格的所有表。显示创建表myTable??我认为您的item_id的默认值为0。欢迎来到MySQL的精彩世界。它认为它比你更清楚你想要什么。请参见此处了解详细信息:Hi a_horse_和_no_name,这是一个很好的建议,但我不允许触摸任何其他表,除非我可以仅在“myTable”上设置严格的_ALL_表。请记住,如果您的id是主键,这可能会再次挤压空值插入。我希望故意显示空值,以便知道这是一个错误,不会添加到数据库中,但select查询以某种方式将其更改为0。因此,如果结果为空,您希望更改为0?请记住,如果您的id是主键,这可能会再次挤压空值插入。我希望故意显示空值,以便知道这是一个错误,不会添加到数据库中,但select查询以某种方式将其更改为0。因此,如果结果为空,您希望更改为0?哪一个?我给了你三种不同的方法来解决这个问题。谢谢你的解决方案,但是只有第三种方法是适用的,因为我必须使用item_id作为主键。我尝试了第三个代码,但它仍然将项_id插入为0。第一个代码应该也可以,因为如果找不到行,它不应该插入任何内容。您确定
mycatalog
中没有一行实际上是
0
?哪一行?我给了你三种不同的方法来解决这个问题。谢谢你的解决方案,但是只有第三种方法是适用的,因为我必须使用item_id作为主键。我尝试了第三个代码,但它仍然将项_id插入为0。第一个代码应该也可以,因为如果找不到行,它不应该插入任何内容。您确定在
mycatalog
中没有一行实际上是
0