如何基于两列创建关联键并实现Order与Return表的LEFT JOIN?
基于组合键实现两表LEFT JOIN的单次SQL语句
需求说明
有两张需要执行LEFT JOIN的表:
- Order表结构:
| ID | CATA | Repo | Assc | - Return表结构:
| ID | CATB | Addl | Sumin |
需以Order表为左表,用Order表的ID+CATA与Return表的ID+CATB作为关联条件执行LEFT JOIN,要求通过单次SQL语句实现。
单次SQL实现方案
无需借助CTE(公共表表达式)提前生成关联键,直接在JOIN的ON子句中拼接字段即可完成关联,这是最简洁的单次SQL实现方式:
SELECT o.*, r.*, CONCAT(o.ID, o.CATA) AS 关联键_Order, CONCAT(r.ID, r.CATB) AS 关联键_Return FROM `Order` o LEFT JOIN `Return` r ON CONCAT(o.ID, o.CATA) = CONCAT(r.ID, r.CATB);
对原示例代码的说明
你提供的示例代码通过CTE提前生成Return表的关联键,虽能实现需求,但属于多段逻辑查询(CTE+主查询)。上述写法直接在JOIN条件中拼接字段,是标准的单次SQL实现。另外原示例中CONCAT(SUPERPNR, CATA)应为笔误,正确写法是CONCAT(ID, CATA)。
内容的提问来源于stack exchange,提问作者StackWiz
相关产品推荐
相关产品推荐

