我正在尝试在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
的结果来减少数据访问。我不确定这是正确的方法。任何帮助,将不胜感激。
我想知道是否有可能使用第二个子查询中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])。如果查询不同,那么最好使用两个独立查询。)