gpt4 book ai didi

mysql - INSERT 来自其他列的 id,如果值不存在则为 NULL

转载 作者:行者123 更新时间:2023-11-29 11:13:31 25 4
gpt4 key购买 nike

数据

我有一组以下格式的数据:

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”中,如果 car_make 中不存在 make_name,则插入“null”;如果 make_name 存在,则插入 car_make.id?

最佳答案

我认为使用 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'
);

关于mysql - INSERT 来自其他列的 id,如果值不存在则为 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40138584/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com