SQL插入使用子查询结果在另一个子查询中

问题描述 投票:0回答:1

我正在尝试在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-

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的结果来减少数据访问。我不确定这是正确的方法。任何帮助,将不胜感激。

sql postgresql
1个回答
1
投票

我想知道是否有可能使用第二个子查询中a表中的第一个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上过滤而子查询在[ C0])。如果查询不同,那么最好使用两个独立查询。)

© www.soinside.com 2019 - 2024. All rights reserved.