【问题标题】:SQL select rows with same id are all having the same valueSQL 选择具有相同 id 的行都具有相同的值
【发布时间】:2016-11-13 07:01:31
【问题描述】:

我有一张这样的桌子:

+--------+------+-----+
|Provider|Type  |Date |
+--------+------+-----+
|1       |Meal  |Date1|
+--------+------+-----+
|1       |ACCOM |Date2|
+--------+------+-----+
|2       |Meal  |Date3|
+--------+------+-----+
|2       |Meal  |Date4|
+--------+------+-----+
|3       |ACCOM |Date5|
+--------+------+-----+
|3       |ACCOM |Date6|
+--------+------+-----+

提供者可以在约会时提供住宿或膳食。 我可以选择所有只提供膳食或只提供住宿的供应商吗?

所以我期待:

+--------+------+-----+
|2       |Meal  |Date3|
+--------+------+-----+
|2       |Meal  |Date4|
+--------+------+-----+
|3       |ACCOM |Date5|
+--------+------+-----+
|3       |ACCOM |Date6|
+--------+------+-----+

因为供应商 2 只提供膳食,供应商 3 只提供住宿。

更新:

原来的问题是:

列出所有只提供住宿或膳食的提供者(不 两个都)。

注意:不要消除结果中的重复项。

所以我认为我应该一步获得重复,而不是再次加入表格。

我想出了以下查询:

SELECT PROVIDERS.PROVID AS ID
FROM PROVIDERS
INNER JOIN ISP ON ISP.PROVID = PROVIDERS.PROVID
WHERE ISP.SVCTYPE = 'ACCOM'

UNION ALL

SELECT PROVIDERS.PROVID AS ID
FROM PROVIDERS
INNER JOIN ISP ON ISP.PROVID = PROVIDERS.PROVID
WHERE ISP.SVCTYPE = 'MEAL'

问题是这个查询有重复的代码,唯一的区别是“ACCOM”或“MEAL”,所以这个查询可以再次改进吗?

【问题讨论】:

  • @GordonLinoff 抱歉,已删除。
  • 你是在偶然创建Airbnb的副本还是增强版?

标签: sql db2


【解决方案1】:

这是一种让每个提供者只获得一行的方法:

select provider, min(type)
from t
group by provider
having min(type) = max(type);

如果您确实想要重复,请使用join:

select t.*
from t join
     (select provider, min(type)
      from t
      group by provider
      having min(type) = max(type)
     ) tt
     on t.provider = p.provider;

【讨论】:

  • 嗨,有没有办法显示所有结果(有重复)?
  • 如果我有除了吃住以外的其他类型?我还能使用 min 和 max 函数吗?
  • @Jackddddd 。 . .是的。它只是检查所有值是否相同。
  • 嗨,我再次更新了我的问题。我添加了 db2 标签,因为我需要在 db2 服务器上运行它。你介意再看一遍吗?
  • @Jackddddd 。 . .这在 DB2 上应该没问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-11
  • 2017-10-10
  • 2012-03-03
  • 2014-07-14
  • 2016-11-11
  • 2020-01-06
相关资源
最近更新 更多