我需要查询将表中的每个项目与每个其他项目配对,但只需要一次

时间:2014-06-14 16:42:23

标签: mysql sql

我在表格中有一组位置:

╔═══════════╗
║ Locations ║
╠═══════════╣
║ A         ║
║ B         ║
║ C         ║
╚═══════════╝

我希望将表中的每个位置与表中的每个其他位置匹配,其中位置不相同,目前我使用此查询。 SELECT a.PostCode AS X, b.PostCode AS Y FROM locations a JOIN locations b WHERE a.Location_ID != b.Location_ID; 这会返回一个这样的结果集。

╔═══╦═══╗
║ X ║ Y ║
╠═══╬═══╣
║ B ║ A ║
║ C ║ A ║
║ A ║ B ║
║ C ║ B ║
║ A ║ C ║
║ B ║ C ║
╚═══╩═══╝

这不是我真正需要的,至于我的目的,对(B,A)和(A,B)是一样的,我想知道是否有办法使用SQL查询(MYSQL)生成如下结果集:

╔═══╦═══╗
║ X ║ Y ║
╠═══╬═══╣
║ B ║ A ║
║ C ║ A ║
║ C ║ B ║
╚═══╩═══╝

1 个答案:

答案 0 :(得分:2)

只需将where条件更改为>

SELECT a.PostCode AS X,
       b.PostCode AS Y 
FROM locations a CROSS JOIN 
     locations b 
WHERE a.Location_ID > b.Location_ID;

如果您没有ON子句,则应使用CROSS JOIN。 MySQL是唯一允许其他JOIN没有ON子句的数据库。