数据
我有以下格式的一组数据:
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中的每个条目返回一行,如果'法拉利'不存在,每个id都存在。
问题
如何创建插入查询,插入' make_notes',并插入' null'如果car_make中不存在make_name,并且如果make_name存在则插入car_make.id?
答案 0 :(得分: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'
);
答案 1 :(得分:0)
我认为你不能用一个查询来做到这一点。我认为您必须运行{{1}}才能从car_make表中获取ID。然后你做插入。