MySQL如何创建仅返回与另一表4个Person列ID匹配的PAR表信息视图
问题原因
你当前的SQL会返回重复记录,不符合需求的核心原因是:使用两表关联的方式时,若同一个PAR表的用户ID在THE_GROUP表的多个分组、或同一分组的多个Person字段中匹配,会生成多条相同的PAR记录。
修正方案
方案1:加DISTINCT去重(最简单的修改方式)
将原有查询加DISTINCT关键字去除重复行,同时替换隐式逗号关联为显式JOIN,提升可读性:
CREATE OR REPLACE VIEW MY_VIEW AS SELECT DISTINCT P.Name, P.State FROM PAR P INNER JOIN THE_GROUP G ON G.Person1 = P.ID OR G.Person2 = P.ID OR G.Person3 = P.ID OR G.Person4 = P.ID;
方案2:使用EXISTS子查询(性能更优,语义更贴合需求)
不需要关联两表,直接通过EXISTS判断PAR记录是否存在匹配的分组,天然不会生成重复数据,数据量大时执行效率远高于方案1:
CREATE OR REPLACE VIEW MY_VIEW AS SELECT P.Name, P.State FROM PAR P WHERE EXISTS ( SELECT 1 FROM THE_GROUP G WHERE P.ID IN (G.Person1, G.Person2, G.Person3, G.Person4) );
执行结果验证
两种方案最终返回的视图数据完全符合需求:
| Name | State |
|---|---|
| Susan | New York |
| Bob | Texas |
| Tony | Washington |
| Adam | California |
内容的提问来源于stack exchange,提问作者Morello
相关产品推荐
相关产品推荐

