sql - 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;
我想知道是否可以在第二个子查询中使用表中的第一个结果SELECT
来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
而子查询过滤的情况并非如此a.data = $2
)。如果查询不同,那么使用两个独立查询可能会更好)。
推荐阅读
- soundcloud - Soundcloud API 在公开可用的轨道上返回 404 Not Found 错误
- java - Apache Artemis 发布者和订阅者授权
- powerbi - 使用天和小时的 Power BI 连续 x 轴
- java - ProgressDialog 只显示一次,然后不再工作
- python - 根据其他数据框列映射熊猫列中的类别值
- c# - ASP.NET Core MVC - 传递给视图的模型属性在 Razor 中显示为空
- perl - Libxml - 如果满足特定条件,则替换 xml 值
- javascript - 如何在js中向上滚动到另一个div内的div?
- c++ - 如何解决模棱两可的运算符重载问题?
- excel - 查找员工的两个条目之间的时间