首页 > 解决方案 > SQL插入在另一个子查询中使用子查询结果

问题描述

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

我正在使用以下查询在表中执行 INSERT 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;

我想知道是否可以在第二个子查询中使用表中的第一个结果SELECTa减少数据访问。我不确定这是正确的方法。任何帮助,将不胜感激。

标签: sqlpostgresqlsql-insert

解决方案


我想知道是否可以在第二个子查询中使用表中第一个 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)。如果查询不同,那么使用两个独立查询可能会更好)。


推荐阅读