从Excel中的SQL查询识别数据表与列:带*字段来源确认
无SQL环境下识别SQL中未关联表字段的来源方法
先修正你提供的SQL中的明显语法错误(应该是Excel复制时的格式问题),整理后的SQL如下:
INSERT INTO work.review SELECT table1.person, case_number, case_date, status, reports FROM example_a table1, example_b table2, (SELECT case_number, open_date as open_cases FROM example_c) table3 WHERE table1.case_number = table2.case_number AND table2.case_number = table3.case_number
(注:你提到的字段前的*应该是Excel里的标记,而非SQL语法,所以按常规SQL格式修正)
仅靠现有SQL文本,完全可以推理出这些字段的可能来源,步骤如下:
1. 梳理所有数据源的字段范围
从FROM子句和子查询能明确:
table1对应example_a:已知包含person、case_number字段(WHERE条件中用到了table1.case_number)table2对应example_b:已知包含case_number字段(WHERE条件用到)table3来自example_c的子查询:仅返回case_number和open_cases(即open_date)两个字段
2. 逐个排除不可能的来源
- case_number:三个数据源都包含这个字段(WHERE条件的关联逻辑证明table1、table2都有,子查询明确从example_c取了这个字段),且关联条件保证三个表的该字段值一致,所以它的来源可能是example_a、example_b或example_c。
- case_date、status、reports:table3的子查询完全没有这三个字段,所以它们只能来自
example_a或example_b。
3. 结合表名命名进一步缩小范围
从表名的业务语义推测:
example_c看起来是case的核心基础表(子查询只取了case的编号和开单日期)example_b更可能是case的业务数据表,包含case_date(case的处理日期)、status(case状态)、reports(case报告)这类业务字段example_a偏向人员关联表,核心字段是person,虽然也可能有case相关字段,但概率低于example_b
补充建议
如果想更准确判断,可以检查Excel中是否有其他相关SQL脚本:比如是否有CREATE TABLE语句、其他查询用到这些表的完整字段列表,能直接锁定字段来源。
内容的提问来源于stack exchange,提问作者learning to code
相关产品推荐
相关产品推荐

