You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL多SELECT语句关联返回意外结果,如何处理?

解决SQL左连接产生笛卡尔积的问题

你当前的SQL里,LEFT JOIN使用了ON true,这个条件会让左表的每一条记录都和右表的所有记录建立关联,自然会产生笛卡尔积。

要得到两列颜色一一匹配的结果,有两种常见的解决方式:

方式一:按颜色值匹配

如果需要颜色值相同的记录关联,把连接条件改成两个颜色字段相等即可,修正后的SQL如下:

SELECT *
FROM (
    SELECT *
    FROM (VALUES ('Red'), ('Blue'), ('Green'), ('Yellow')) AS t (colors1)
) A
LEFT JOIN (
    SELECT *
    FROM (VALUES ('Red'), ('Blue'), ('Green'), ('Yellow')) AS t (colors2)
) B ON A.colors1 = B.colors2

方式二:按行顺序匹配

如果两个表的颜色顺序完全一致,想要按行的位置(比如左表第1行连右表第1行)关联,可以借助行号来实现:

SELECT A.colors1, B.colors2
FROM (
    SELECT colors1, ROW_NUMBER() OVER () AS rn
    FROM (VALUES ('Red'), ('Blue'), ('Green'), ('Yellow')) AS t (colors1)
) A
LEFT JOIN (
    SELECT colors2, ROW_NUMBER() OVER () AS rn
    FROM (VALUES ('Red'), ('Blue'), ('Green'), ('Yellow')) AS t (colors2)
) B ON A.rn = B.rn

这两种方式都能得到你期望的Red Red、Blue Blue这类一一对应的结果。

内容的提问来源于stack exchange,提问作者dbApostle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 03:02:35