Я пытаюсь вставить в таблицу, но только если она уникальна. Я могу сделать это по одному критерию, но не по двум? Я не уверен, где я ошибаюсь? Он не возвращает ошибку, просто ведет себя так, как будто есть только один критерий.
Простая таблица, autoID, статус, тип
INSERT INTO alarms (status, type)
SELECT * FROM (SELECT '2', '1') AS tmp
WHERE NOT EXISTS
( SELECT type FROM alarms WHERE (type = '1')) LIMIT 1;
Это работает нормально, он будет вставлен только в том случае, если нет других записей с типом 1.
Я хотел бы иметь несколько критериев, например, если они уже есть в таблице type=1 И status=5, тогда вставьте новую запись type=1 и status=2. Я пробовал следующее (с несколькими вариантами), но не могу заставить его работать. Никаких ошибок, просто ведет себя так, как будто есть только один критерий.
INSERT INTO alarms (status, type)
SELECT * FROM (SELECT '2', '1') AS tmp
WHERE NOT EXISTS
( SELECT type, status FROM alarms WHERE (type = '1' AND status = '5')) LIMIT 1;
Любой совет? Или мне нужно сделать отдельный вызов, чтобы определить наличие нескольких критериев. Спасибо.






Вы пытались вместо этого использовать if-begin-end? Код мог бы быть проще, но я полагаю, это все равно считается одним оператором.
If Not Exists( SELECT type, status FROM alarms WHERE (type = '1' AND status = '5'))
Begin
INSERT INTO alarms (status, type) values ("Y","type")
End
Привет, это выглядит прямолинейно, но я пробовал это безуспешно, я продолжаю получать синтаксические ошибки SQL в верхней строке, но я не могу определить, как? Если я просто использую оператор SELECT, он работает нормально.
Попробуйте использовать "HAVING"
INSERT INTO alarms (status, type)
SELECT status, type
FROM alarms_duplicated AS a
WHERE status = '2' AND type = '1'
GROUP BY status, type
HAVING COUNT(*) = 1
спасибо за ваш вклад. Я бы выглядел так, как будто IF NOT EXIST .... WHERE не будет работать, по-видимому, оператор WHERE несовместим с mySQL. Так что я сделал это по-другому!
(Совершенно другой подход к рассматриваемому вопросу, не относящийся к этому обсуждению).
Вы пробовали вместо этого использовать if / begin / end?