我有张这样的桌子:
+--------+------+-----+
|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‘或’‘,所以这个查询还能再改进吗?
发布于 2016-11-10 02:11:47
下面是一种方法,在这种方法中,每个提供程序只获得一行:
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;https://stackoverflow.com/questions/40518964
复制相似问题