Я использую PostgreSQL 9.0, и у меня есть таблица с только искусственным ключом (автоинкрементная последовательность) и еще один уникальный ключ. (Да, есть причина для этой таблицы.:)) Я хочу искать идентификатор другим ключом или, если он не существует, вставьте его:
SELECT id
FROM mytable
WHERE other_key = 'SOMETHING'
Затем, если нет совпадения:
INSERT INTO mytable (other_key)
VALUES ('SOMETHING')
RETURNING id
Вопрос: можно ли сохранить двустороннюю поездку в БД, выполнив оба из них в одном утверждении? Я могу вставить строку, если она не существует следующим образом:
INSERT INTO mytable (other_key)
SELECT 'SOMETHING'
WHERE NOT EXISTS (SELECT * FROM mytable WHERE other_key = 'SOMETHING')
RETURNING id
... но это не дает идентификатор существующей строки. Есть идеи? Существует уникальное ограничение на other_key, если это помогает.