SQL多表查询问题:如何获取用户ID=1关联的所有文件?
正确SQL解决方案
原SQL的问题
- 未关联核心关联表
Files_Users,错误地直接关联Files和Users(两表无直接File_Id关联关系) - 字段名错误:使用了不存在的
Ext_Emp_Id/Int_Emp_Id,实际对应Files_Users表的Ext_User_Id/Int_User_Id - 逻辑运算符优先级问题:
AND优先级高于OR,导致条件被错误解析为(A.Id = B.File_Id AND Ext_Emp_Id=1) OR Int_Emp_Id=1,产生大量无效关联和重复数据
正确SQL语句
SELECT DISTINCT A.Id, A.`File Name` AS File_Name FROM Files A JOIN Files_Users FU ON A.Id = FU.File_Id WHERE FU.Int_User_Id = 1 OR FU.Ext_User_Id = 1;
说明
- 使用
JOIN明确关联Files和Files_Users表,通过File_Id建立正确关联 - 用
DISTINCT去重:避免同一文件因同时匹配内部/外部用户ID(如File1的Int_User_Id和Ext_User_Id都是1)而返回重复记录 - 条件直接筛选
Files_Users表中Int_User_Id或Ext_User_Id等于1的记录,精准获取关联文件
内容的提问来源于stack exchange,提问作者Mohamed Gaber
相关产品推荐
相关产品推荐

