MS Access Вставка, где не существует - PullRequest
0 голосов
/ 13 сентября 2018

У меня есть следующая таблица:

+-----------+--------+
| FirstName | Active |
+-----------+--------+
| Rob       | TRUE   |
| Jason     | TRUE   |
| Mike      | FALSE  |
+-----------+--------+

Я хотел бы вставить 'Джон' (с Active = True), только если запись для Джона еще не существует where Active=True. Я пробую следующее:

insert into testTable (FirstName, Active) values ('John',True) where not exists (select 1 from testTable where FirstName='John' and Active=True)

но я получаю «Ввод запроса должен содержать хотя бы одну таблицу или запрос».

Может ли кто-нибудь помочь с тем, чего я пытаюсь достичь?

Ответы [ 2 ]

0 голосов
/ 23 марта 2019

В моем случае поле уже существует в таблице, поэтому я изменил его с INSERT на запрос UPDATE, и оно сработало.

0 голосов
/ 13 сентября 2018

Нельзя объединить Values с предложением WHERE.Вместо этого вам нужно использовать INSERT INTO ... SELECT.

Поскольку вы не хотите вставлять значения из таблицы, вам необходимо использовать фиктивную таблицу.Я использую MSysObjects для этой цели (это системная таблица, которая всегда существует и всегда содержит строки):

INSERT INTO testTable (FirstName, Active) 
SELECT 'John', True
FROM (SELECT First(ID) From MSysObjects) dummy
WHERE NOT EXISTS (select 1 from testTable where FirstName='John' and Active=True)
...