SQL вставить результат использования подзапроса в другой подзапрос - PullRequest
0 голосов
/ 08 января 2020

Я пытаюсь выполнить следующий запрос в postgresql, чтобы вставить данные в таблицу из результатов подзапроса двух таблиц.

Вот мои три примера таблиц -

CREATE TABLE a (
  id SERIAL PRIMARY KEY
  data int
);
CREATE TABLE b (
  id SERIAL PRIMARY KEY,
  aID INT 
  data INT
);
CREATE TABLE c (
  id SERIAL PRIMARY KEY,
  aID INT,
  bID INT,
  name VARCHAR
);

Я использую следующий запрос для вставки в таблицу c -

INSERT INTO c (
  aID,
  bID,
  name)
VALUES (
  (SELECT id FROM a WHERE data=$1),
  (SELECT id FROM b WHERE data=$2 AND aID=(SELECT id FROM a WHERE data=$1)),
  $3)
ON CONFLICT (bID)
DO NOTHING;

Мне было интересно, можно ли использовать результаты первого SELECT из таблицы a во втором подзапросе, чтобы уменьшить доступ к данным. Я не уверен, что это правильный путь к go. Любая помощь будет оценена.

1 Ответ

1 голос
/ 08 января 2020

Мне было интересно, можно ли использовать результаты первого SELECT из таблицы во втором подзапросе для уменьшения доступа к данным.

Я подозреваю, что вы хотите вместо join:

INSERT INTO c (aID, bID, name)
SELECT a.id, b.id, $3
FROM a 
INNER JOIN b ON b.aid = a.id
WHERE a.data = $1 AND b.data = $2

Это предполагает, что «первый выбор из таблицы» и «второй подзапрос» на самом деле тот же запрос (что не совсем так в вашем вопросе, когда первый запрос фильтруется на a.data = $1, а подзапрос - на a.data = $2). Если запросы разные, тогда вам, вероятно, лучше использовать два независимых запроса).

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