如何在SQL视图中实现关联表指定列去重的内连接查询
SQL视图实现方案
你可以先对TableB的account列做去重处理后再参与关联,有两种常用实现方式:
方式1:子查询先对TableB去重
直接在关联前用DISTINCT筛选出TableB唯一的account值再做内连接,代码逻辑直观易读:
CREATE VIEW 你的视图名称 AS SELECT a, b, c, d FROM TableA INNER JOIN ( SELECT DISTINCT account FROM TableB ) AS UniqueB ON TableA.account = UniqueB.account;
这种写法会先过滤掉TableB中重复的account值,仅用唯一值和TableA关联,最终返回的a、b、c、d全部来自TableA,不会做额外去重处理,完全符合需求。
方式2:用EXISTS关键字实现
多数数据库对EXISTS查询有优化,执行效率通常更高,效果和方式1完全一致:
CREATE VIEW 你的视图名称 AS SELECT a, b, c, d FROM TableA WHERE EXISTS ( SELECT 1 FROM TableB WHERE TableB.account = TableA.account );
这种写法只要TableB中存在任意一条匹配的account记录,就会返回对应的TableA行,天然避免了TableB重复account导致的结果行膨胀,也不需要对最终返回字段做去重。
补充说明:如果后续需要关联返回TableB的其他字段,只需要在方式1的子查询中添加对应字段,同时保证
DISTINCT作用的字段组合无重复即可。
内容的提问来源于stack exchange,提问作者hana
相关产品推荐
相关产品推荐

