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

时间:2016-10-19 18:04:20

标签: mysql insert

数据

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

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?

2 个答案:

答案 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。然后你做插入。