如何通过主键关联CTE与表?关联条件报错求修正
SQL代码修正方案
你的代码存在两个核心问题,导致关联条件失效:
- 公共表表达式(CTE)
table_harga_barang只查询了harga字段,缺少和kimia.barang表关联必需的id_barang字段 - JOIN子句里的
pen.id_barang是CTE内部的表别名,在CTE外部无法被引用,外部只能访问CTE生成的table_harga_barang表
以下是修正后的代码:
with table_harga_barang as ( select id_barang, harga -- 新增id_barang字段,用于关联 from `kimia.penjualan` pen where id_barang >= 'BRG0001' and id_barang <= 'BRG0010' ) select thb.harga as harga_barang, -- 明确引用CTE中的harga字段,给表起别名更清晰 bar.nama_barang, bar.tipe, bar.lini from table_harga_barang thb -- 给CTE起别名thb,简化引用 inner join `kimia.barang` bar on bar.kode_barang = thb.id_barang; -- 使用CTE中的id_barang做关联
修正说明:
- 在CTE中补充了
id_barang字段,这是两张表关联的关键字段(对应kimia.barang的kode_barang) - 给CTE表起了别名
thb,不仅简化了字段引用,也避免了表名过长的问题 - JOIN条件改为使用CTE的
thb.id_barang关联bar.kode_barang,确保关联逻辑合法 - 修正了SELECT子句中引用
harga字段的方式,原写法直接写表名会触发语法错误,需指定具体字段
内容的提问来源于stack exchange,提问作者Beami MW
相关产品推荐
相关产品推荐

