2016-07-26 59 views
2

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返回相同的結果。

+4

'A.colorname

+1

'A.colorname <> B.colorname'是'A.colorname ydoow

回答

1

表中的值都不相同,並且可以始終按字母順序排序。

通過加入<比較表,它將始終通過將左側的行連接到右側具有「更大」值的行來給出結果行。

+-------+ +-------+ 
| Name | | Name | 
+-------+ +-------+ 
| red | | red | 
+-------+ +-------+ 
| black | | black | 
+-------+ +-------+ 
| white | | white | 
+-------+ +-------+ 
| green | | green | 
+-------+ +-------+ 
| orange| | orange| 
+-------+ +-------+ 

從左邊的表的第一行開始,從JOIN結果

red - white 

然後在第二排,從JOIN結果

black - red 
black - white 
black - green 
black - orange 

第三排,因爲有沒有大於white這將產生空的結果。

您可以使用相同的邏輯計算出其餘結果。

因此,它將顯示沒有排列的所有對。

注意A.colorname<>B.colorname沒有必要,因爲它只是A.colorname < B.colorname的一個子集。

1

A.colorname < B.colorname 以字母順序給出結果。兩種顏色的排列只挑選一次。對於例如黑色和紅色有兩個置換:

  1. 黑色,紅色
  2. 紅色,黑色。

只挑選第一個,因爲顏色的名稱按字母順序排列。