【发布时间】: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?
【问题讨论】: