sql - 查找不可能的行和列组合
问题描述
基于 SQL Server,我有多行多列。每行包含一个产品配置,该配置至少在一列中不同。现在我需要知道哪些是不存在的配置。这三列只是一个示例,以使其更易于理解。
数据示例:
产品 | 尺寸 | 颜色 |
---|---|---|
衬衫 | 小号 | 红色的 |
衬衫 | 小号 | 蓝色的 |
衬衫 | 小号 | 黑色的 |
衬衫 | 米 | 红色的 |
衬衫 | 米 | 蓝色的 |
衬衫 | 大号 | 黄色的 |
结果,缺少这些配置:
产品 | 尺寸 | 颜色 |
---|---|---|
衬衫 | 小号 | 黄色的 |
衬衫 | 米 | 黑色的 |
衬衫 | 米 | 黄色的 |
衬衫 | 大号 | 红色的 |
衬衫 | 大号 | 蓝色的 |
衬衫 | 大号 | 黑色的 |
解决方案
您可以使用cross join
来生成所有行。然后过滤掉存在的那些:
select p.product, s.size, c.color
from (select distinct product from t) p cross join
(select distinct size from t) s cross join
(select distinct color from t) c left join
t
on p.product = t.product and
s.size = t.size and
c.color = t.color
where t.product is null;
推荐阅读
- reactjs - 如何在 jsx 文件/React 组件中解析 markdown 的 yaml frontmatter?
- excel - 对多个级别进行分组时,Excel VBA 脚本不起作用
- python - 使用 Python Arcade 库绘制线条时出现延迟
- javascript - 从非零元素开始使用 findIndex()
- amazon-web-services - 如何强制 AmazonDynamoDBClientBuilder 从代码中获取密钥和秘密
- javascript - 重置关联数组的值
- ssrs-2012 - SSRS 订阅:将报告写入文件共享 - 并且 - 发送电子邮件通知
- javascript - 如何将多个(输入)值传递到查询字符串
- ms-access - MS-Access...使用表单上的最后一条记录信息创建一条新记录
- solr - 为什么不建议使用通配符搜索实现预输入?