如果值不存在,则从其他列插入 id 或 NULL
Posted
技术标签:
【中文标题】如果值不存在,则从其他列插入 id 或 NULL【英文标题】:INSERT id from other column or NULL if value does not exist 【发布时间】:2017-03-01 12:26:26 【问题描述】:数据
我有一组数据,格式如下:
CAR_MAKE TABLE
ID MAKE
1 Ford
2 Tesla
3 Acura
4 Honda
5 Toyota
MAKE_NOTES TABLE
NOTE_ID MAKE_ID MAKE_NAME NOTE
1 1 Ford New QNX-Based Sync System
2 2 Tesla Looking forward to Model 3
3 5 Toyota Updated Corolla 2018
4 Null Ferrari Very Fast and Very Red
我知道表 1 和表 2 之间存在重复数据 (make_name)。假设我不能弄乱数据。我也不能保证会先在 car_make 中创建条目。在这种情况下,make_notes.make_id 应该为 null。
到目前为止我做了什么
我要做的是在make_notes中插入一行,如果它在car_make中不存在,则将null插入make_id,否则插入car_make.id。
如果 make_name 存在于 car_make 中,这可以正常工作...但是如果我尝试插入一条带有在 car_make 中不存在的 make_name 的记录,则不会插入任何记录(也不会引发错误)。
INSERT INTO make_notes (
make_id,
make_name,
note
)
SELECT
id,
'ford',
'New Note'
FROM car_make
WHERE make = 'ford';
我也尝试将其用作子查询:
SELECT
CASE
WHEN (SELECT EXISTS (SELECT 1 FROM car_make where make = 'Ferrari') = 1)
THEN car_make.id
ELSE null
END AS make_id
FROM car_make;
我一直没有将它集成到我的主查询中而不会引发错误。作为独立查询,它为 car_make 中的每个条目返回一行,如果 'Ferrari' 不存在则返回 null,如果存在则返回每个 id。
问题
如何创建一个插入查询,该查询将插入到“make_notes”中,如果 make_name 在 car_make 中不存在则插入“null”,如果 make_name 存在则插入 car_make.id?
【问题讨论】:
【参考方案1】:我认为使用IF() 子句应该适用于您的情况:
INSERT INTO `make_notes` (
make_id,
make_name,
note
)
VALUES(
IF(
((SELECT COUNT(*) FROM `car_make` WHERE `make` = 'ford') > 0),
(SELECT `id` FROM `car_make` WHERE `make` = 'ford'),
NULL
),
'ford',
'New note'
);
【讨论】:
【参考方案2】:我认为你不能通过一个查询来做到这一点。我认为您必须运行 select
才能从 car_make 表中获取 ID。然后进行插入。
【讨论】:
以上是关于如果值不存在,则从其他列插入 id 或 NULL的主要内容,如果未能解决你的问题,请参考以下文章
MySQL:如果值存在,则对行进行更新,如果值不存在,则插入 [重复]