【问题标题】:sql Better way than intersection of inner-joinsql 比内连接交集更好的方法
【发布时间】:2016-05-24 11:59:41
【问题描述】:

我们有一个包含 2 列的表:ObjectName 和 ObjectColor。这是一个多对多表。我们有一组给定的颜色 {x, y, z,...}

我们想要选择所有这些给定颜色存在的 ObjectName 列表。

如果我们有 N 种颜色,我可以想象在同一张表上有 N-1 个交集的 sql 查询。或者我们也可以想象该表上有 N-1 个自连接。

有没有更好的解决方案? MySQL 有什么特殊的解决方案吗?

思考

【问题讨论】:

  • 如果颜色是运行时表中的行,了解关系除法和类似查询。

标签: mysql sql intersection self-join


【解决方案1】:

这是一种方法:

select objectname
from t
where objectcolor in (x, y, z)
group by objectname
having count(*) = 3;

您需要调整“3”以匹配列表的大小。

【讨论】:

  • 不错!而对于“3”,我可以做到。我认为这个解决方案比交集或加入要好得多。你不觉得“count(*)”有时会很贵吗?
  • COUNT(*) 需要进行表或索引扫描,但我不确定您将如何避免这种情况。
猜你喜欢
  • 2020-08-03
  • 1970-01-01
  • 2019-11-27
  • 1970-01-01
  • 2016-04-03
  • 2017-06-26
  • 1970-01-01
  • 1970-01-01
  • 2021-02-24
相关资源
最近更新 更多