<SKYLER/>
什么是CROSS JOIN LATERAL
Back to Blog
September 10, 2025数据库, MySql

🪅什么是CROSS JOIN LATERAL

sql知识

CROSS JOIN LATERAL 是SQL中的一种特殊连接方式,让我详细解释:

CROSS JOIN LATERAL 的组成

1. CROSS JOIN(笛卡尔积)

  • 将左表的每一行与右表的每一行进行组合
  • 如果左表有3行,右表有2行,结果是6行

2. LATERAL(横向连接)

  • 允许右侧的表达式引用左侧表的列
  • 右侧的表达式会对左侧的每一行分别执行

工作原理

-- 普通 CROSS JOIN(不能引用左表的列)
SELECT * FROM table1 
CROSS JOIN (SELECT * FROM table2)  -- ❌ 这里不能引用 table1 的列

-- CROSS JOIN LATERAL(可以引用左表的列)
SELECT * FROM table1 
CROSS JOIN LATERAL (SELECT * FROM table2 WHERE table2.id = table1.id)  -- ✅ 可以引用

栗子🌰

FROM dwd_voc_voice_detail
CROSS JOIN LATERAL unnest(split(tags, ',')) AS t(tag)

这里的执行过程:

  1. 对于dwd_voc_voice_detail表的每一行
  2. 执行unnest(split(tags, ',')),其中tags来自当前行
  3. 将拆分后的结果与原始行进行连接

假设原始数据:

id | brand | tags
---+-------+----------------
1  | DREO  | 'good,cheap,fast'
2  | DREO  | 'quality,service'

执行后的结果:

id | brand | tag
---+-------+--------
1  | DREO  | good
1  | DREO  | cheap
1  | DREO  | fast
2  | DREO  | quality
2  | DREO  | service