首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有相同id的SQL选择行都具有相同的值。

具有相同id的SQL选择行都具有相同的值。
EN

Stack Overflow用户
提问于 2016-11-10 02:10:28
回答 1查看 2.2K关注 0票数 0

我有张这样的桌子:

代码语言:javascript
复制
+--------+------+-----+
|Provider|Type  |Date |
+--------+------+-----+
|1       |Meal  |Date1|
+--------+------+-----+
|1       |ACCOM |Date2|
+--------+------+-----+
|2       |Meal  |Date3|
+--------+------+-----+
|2       |Meal  |Date4|
+--------+------+-----+
|3       |ACCOM |Date5|
+--------+------+-----+
|3       |ACCOM |Date6|
+--------+------+-----+

服务商可以在约会时提供住宿或膳食。,我是否可以选择所有只提供膳食或仅提供住宿的供应商?

所以我期待:

代码语言:javascript
复制
+--------+------+-----+
|2       |Meal  |Date3|
+--------+------+-----+
|2       |Meal  |Date4|
+--------+------+-----+
|3       |ACCOM |Date5|
+--------+------+-----+
|3       |ACCOM |Date6|
+--------+------+-----+

因为提供者2只提供膳食,而提供者3只提供住宿。

更新:

原来的问题是:

列出所有只提供住宿或膳食的供应商(不是两者兼而有之)。 注意:不要删除结果中的重复项。

所以我想我应该一步一步地得到复制件,而不是再次加入表格。

我提出了以下查询:

代码语言:javascript
复制
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‘或’‘,所以这个查询还能再改进吗?

EN

回答 1

Stack Overflow用户

发布于 2016-11-10 02:11:47

下面是一种方法,在这种方法中,每个提供程序只获得一行:

代码语言:javascript
复制
select provider, min(type)
from t
group by provider
having min(type) = max(type);

如果您真的想要副本,那么使用join

代码语言:javascript
复制
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;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40518964

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档