shi*_*ndu 0 sql combinations permutation cross-join
我有一张桌子,只有一列由5种颜色组成 -
colour
-------
red
black
white
green
orange
Run Code Online (Sandbox Code Playgroud)
我希望得到所有的组合
(红色,橙色)(黑色,白色)...等等除了相同的那些.我试图与自己交叉加入表.
select *
from table1 cross join table1
Run Code Online (Sandbox Code Playgroud)
但我没有得到所需的答案.它返回了所有的组合.也是相同的那些.我能得到它吗?有没有其他方法可以做到这一点而不创建另一个表???
如果相同则表示像(白色,白色)这样的对,也许这就是你想要的:
SELECT a.color, b.color
FROM colors a
CROSS JOIN colors b
WHERE a.color != b.color
Run Code Online (Sandbox Code Playgroud)
如果相同你另外意味着只保留(白色,黑色)或(黑色,白色)中的一个也许这就是你想要的:
SELECT a.color, b.color
FROM colors a
CROSS JOIN colors b
WHERE a.color > b.color
Run Code Online (Sandbox Code Playgroud)
重要的是在执行交叉连接后拒绝您不想要的元素.
请注意,这不会创建任何新表或修改现有表.a
并且b
只是同一个表的两个不同的别名colors
.该表只有一列color
,但由于SELECT在SELECT中存在两次,因此您需要区分表的两个(概念性的,而非事实的!)实例colors
.
你不能没有 join
(然后你的行数太少),也没有别名就可以轻松做(你必须引用两列来拒绝某些行),也没有理由分配别名.
归档时间: |
|
查看次数: |
2829 次 |
最近记录: |