Как сделать условную вставку в SQL - PullRequest
0 голосов
/ 18 апреля 2019

Я хотел бы знать, как я могу вставить что-то в свою базу данных ТОЛЬКО ЕСЛИ это соответствует определенным условиям. Я не хочу вставлять что-либо с несанкционированными значениями.

На самом деле я хотел бы сделать что-то вроде этого: (допустим, я хочу вставить новый заказ, только если он поступает от определенного типа клиентов)

    INSERT INTO orders
    (columns names)
    VALUES (values)
    WHERE orders.client_id IN (SELECT id FROM clients WHERE condition...)

(я знаю, что это невозможно, это для примера.)

Я пробовал это:

    INSERT INTO orders
    (columns names)
    VALUES (values);
    DELETE orders
    WHERE orders.client_id NOT IN (SELECT id FROM clients WHERE condition...)
    ORDER BY id DESC LIMIT 1

Кажется, это помогает. Но я не могу поверить, что это хорошее решение.

Итак, мой вопрос: Есть ли способ сделать это правильно, и в только один запрос?

(Я нашел много постов по темам, более или менее похожим на эту, но у большинства из них есть ответы с INSERT INTO ... SELECT ..., которые я не понимаю, и кажется не работает в моем случае.)

Ответы [ 2 ]

3 голосов
/ 18 апреля 2019

Вы можете обмануть его с помощью SELECT из фиктивного подзапроса, который позволит вам использовать предложение where.

     INSERT INTO orders
     (client_id, ...)
     SELECT client_id, ...
     FROM (SELECT 'your_value' AS client_id, ...) foo
     WHERE client_id IN (SELECT id FROM clients WHERE condition...);
1 голос
/ 18 апреля 2019

Это то, что вы хотите?

INSERT INTO orders (columns names)
    SELECT . . .
    FROM clients
    WHERE condition;

Я не понимаю, зачем вам подзапрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...