2013-01-07 74 views
0

我有一个表的5颜色 -排列组合

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

我想所有的组合就像只有一个consisiting

(红,橙) (黑色,白色) 。 。 。 等除了相同的ones.i试图交叉加入表与自己。

select * 
from table1 cross join table1 

,但我并没有得到预期的answer.it返回的所有combinations.also相同ones.how我可以得到它???是否有任何其他方式做到这一点,而无需创建另一个表???

回答

5

如果相同,也可以意味着对像(白,白),或许这就是你想要什么:

SELECT a.color, b.color 
FROM colors a 
CROSS JOIN colors b 
WHERE a.color != b.color 

如果相同,也可以另外的意思是只保留一个(白,黑)或(黑色,白色)也许这就是你想要的:

SELECT a.color, b.color 
FROM colors a 
CROSS JOIN colors b 
WHERE a.color > b.color 

重要的部分是在你执行交叉连接后拒绝你不想要的元素。

注意这不会创建任何新表或修改现有ab仅仅是同一个表colors两个不同的别名。该表只有一列color,但由于该表出现两次在SELECT,你需要区分colors表的两个(概念,不是事实!)实例。

你不能这样做没有join(然后你得太少行),也可以很容易地做到无别名(你指两列,将拒绝某些行),也不是有原因的分配别名。

+0

如果我不想使用其他colomn或另一个表????有没有办法什么???? @jan dvorak –

+0

@shishir_bindu你没有使用两个表。这将使用同一个表两次('a'和'b'只是别名)。你不能没有自己加入表格。 –

+0

谢谢你。:)我没有得到第一名的别名概念,但现在明白了。再次感谢。 –

1

组合:

SELECT a.color,b.color 
FROM colors a 
JOIN colors b 
ON a.color < b.color 

排列组合:

SELECT a.color,b.color 
    FROM colors a 
    JOIN colors b 
    ON a.color != b.color