多个结果集的MySQL产品

时间:2014-03-05 07:02:51

标签: mysql sql

假设我有多个结果集,每个结果集都有相同的列数。 但我可能有5个结果集,或10个结果集。

我需要从这些结果集中做一个产品。 在数学中应该写成 A * B * C * D ... * N

我可以使用SQL语句实现这一点吗? 到目前为止,我知道如果我有一定数量的自我联接,我可以这样做。 我可以做点像

SELECT tcs1.*, tbl1.*, tbl2.*, tbl3.*, CONCAT(tbl1.actual_id, tbl2.actual_id, tbl3.actual_id) as new_test_case_name
FROM test_config_sets tcs
LEFT JOIN test_config_sets tcs1 ON tcs.test_case = tcs1.test_case
CROSS JOIN (SELECT tcd.actual_id 
    FROM test_config_profiles tcp 
    LEFT JOIN test_config_data tcd ON tcp.id = tcd.profile
    WHERE tcp.id = 649) as tbl1
CROSS JOIN (SELECT tcd.actual_id 
    FROM test_config_profiles tcp 
    LEFT JOIN test_config_data tcd ON tcp.id = tcd.profile
    WHERE tcp.id = 188) as tbl2
CROSS JOIN (SELECT tcd.actual_id 
    FROM test_config_profiles tcp 
    LEFT JOIN test_config_data tcd ON tcp.id = tcd.profile
    WHERE tcp.id = 189) as tbl3
WHERE tcs.test_config_profile = 649 AND tcs1.test_case = 400
GROUP BY new_test_case_name
ORDER BY tcs1.test_case ASC, tcs1.sequence ASC;

在这个例子中,我有3组特定的数据,tbl1,tbl2和tbl3。 即使我有N组数据,如何将其扩展为足够动态以返回结果?

1 个答案:

答案 0 :(得分:0)

CROSS JOIN可以使用如下:

SELECT tcs.*, tcp.*, tcd.*
FROM test_config_sets tcs
CROSS JOIN test_config_profiles tcp
CROSS JOIN test_config_data  tcd

如果表格有2行,4行和5行,则输出结果集将包含2 * 4 * 5行。在CROSS JOIN中,表的每一行与其连接的其他表的每一行连接在一起。