如何用单条SQL语句通过CROSS JOIN实现两个查询的笛卡尔积?
解决方法:用CROSS JOIN生成笛卡尔积
嗨,这个需求太常见啦!要实现你要的两个结果集的笛卡尔积(每个service对应所有city的组合),直接用SQL的**CROSS JOIN(交叉连接)**就搞定了——这正是专门用来生成笛卡尔积的语法,会自动把左侧结果集的每一行和右侧结果集的每一行进行组合。
具体实现示例
假设你的第一个返回service的查询是获取值1、2、3,第二个返回city的查询是获取值4、5,你可以把这两个查询作为子查询,用CROSS JOIN连接起来:
SELECT s.service, c.city FROM ( -- 替换成你返回service列的原始SQL语句 SELECT 1 AS service UNION SELECT 2 UNION SELECT 3 ) AS s CROSS JOIN ( -- 替换成你返回city列的原始SQL语句 SELECT 4 AS city UNION SELECT 5 ) AS c;
针对实际表的调整
如果你的两个结果集是从真实数据表中查询出来的(比如第一个是从服务表筛选,第二个是从城市表筛选),只需要把子查询替换成你的实际查询逻辑就行:
SELECT s.service, c.city FROM ( -- 这里是你获取service列的原始查询 SELECT service FROM your_service_table WHERE [你的筛选条件] ) AS s CROSS JOIN ( -- 这里是你获取city列的原始查询 SELECT city FROM your_city_table WHERE [你的筛选条件] ) AS c;
执行这条SQL后,就能得到你想要的结果:
| service | city |
|---|---|
| 1 | 4 |
| 1 | 5 |
| 2 | 4 |
| 2 | 5 |
| 3 | 4 |
| 3 | 5 |
内容的提问来源于stack exchange,提问作者lazarkoo
相关产品推荐
相关产品推荐

