表Name
:
+-------+
| Name |
+-------+
| red |
| black|
| white |
| green |
| orange|
+--------+
输出将返回该对(不允许排列,例如黑色,红色和红色,黑色)
我的SQL Server查询:
select
A, B
from
(select
A.colorname A, B.colorname B
from
colors A
join
colors B on A.colorname <> B.colorname
and A.colorname < B.colorname) C
我的问题是:这个查询是如何工作的?
我没有得到A.colorname < B.colorname
在这里工作的方式......事实上,删除A.colorname<>B.colorname
会返回相同的结果。
答案 0 :(得分:1)
A.colorname < B.colorname
为您提供按字母顺序排列的结果。两种颜色的排列仅被挑选一次。对于例如黑色和红色有两种排列:
仅挑选第一个,因为颜色名称按字母顺序排列。
答案 1 :(得分:1)
表格中的值都不同,并且可以按字母顺序排序。
通过将表与<
进行比较,它总是通过将左侧的行连接到右侧具有“更大”值的行来提供结果行。
+-------+ +-------+
| Name | | Name |
+-------+ +-------+
| red | | red |
+-------+ +-------+
| black | | black |
+-------+ +-------+
| white | | white |
+-------+ +-------+
| green | | green |
+-------+ +-------+
| orange| | orange|
+-------+ +-------+
从LEFT表的第一行开始,JOIN
的结果是
red - white
然后在第二行,JOIN
的结果是
black - red
black - white
black - green
black - orange
在第三行,因为没有大于white
会产生空结果。
您可以使用相同的逻辑来计算剩余的结果。
结果,它将显示所有对而没有排列。
注意A.colorname<>B.colorname
不是必需的,因为它只是A.colorname < B.colorname
的一个子集。