如何在sql查询中生成多个可能的组合

时间:2014-02-20 03:47:58

标签: mysql sql sql-server-2008

我对以下问题感到困惑 - 我有两张桌子,

Table A (A1,A2,A3,A4)
TABLE B (B1,B2,B3,B4,B5)

从表A和表B的3行生成2行的所有可能组合的查询是什么。 例如 - 我可以像[A1,A2,B1,B2,B3],[A1,A1,B2,B3,B4]这样的组合是合法的。即允许表中的重复值,因为不允许表B中的值重复,即不允许[A1,A2,B1,B1,B1]。 我们如何为此编写SQL查询? 提前感谢你们。

1 个答案:

答案 0 :(得分:3)

您可以使用cross join获取所有组合。那么,您的目标是将这些主题过滤到“b”表中的条件。以下查询使用cross joinwhere子句执行此操作:

SELECT a1.value AS a1, 
       a2.value AS a2, 
       b1.value AS b1, 
       b2.value AS b2, 
       b3.value AS b3 
FROM   tablea a1 
       CROSS JOIN tablea a2 
       CROSS JOIN tableb b1 
       CROSS JOIN tableb b2 
       CROSS JOIN tableb b3 
WHERE  b1.value < b2.value 
       AND b2.value < b3.value; 

为避免重复,TableB中的值必须按顺序排列。