如何用SQL生成Ingredients表Name列的所有两两组合?
实现Ingredients表的两两组合查询
当然可以实现!这在SQL里是个很常见的需求,用**自连接(Self-Join)**就能轻松搞定。下面给你两种常见场景的具体方案:
1. 只保留无重复的无序组合(如你示例中的情况)
如果你只需要像(Cheese, Beans)、(Cheese, Potato)这种不重复的配对(不会出现反向的(Beans, Cheese)),可以用以下SQL:
SELECT a.Name AS Ingredient1, b.Name AS Ingredient2 FROM Ingredients a JOIN Ingredients b ON a.Name < b.Name;
这个写法通过a.Name < b.Name的条件,确保每个组合只会被返回一次,完美匹配你想要的结果。如果你的数据库对大小写敏感(比如会区分Cheese和cheese),可以改成LOWER(a.Name) < LOWER(b.Name)来统一判断标准。
2. 包含所有有序组合(含反向配对)
如果需要保留所有顺序不同的配对(比如同时有(Cheese, Beans)和(Beans, Cheese)),只需要调整连接条件:
SELECT a.Name AS Ingredient1, b.Name AS Ingredient2 FROM Ingredients a JOIN Ingredients b ON a.Name != b.Name;
这个查询会排除和自身配对的情况(比如(Cheese, Cheese)),如果连自身配对也需要,直接去掉ON子句的条件即可。
内容的提问来源于stack exchange,提问作者Hoepless
相关产品推荐
相关产品推荐

