给定一个SQL数据库具有以下表SQL JOIN当至少有一个表包含所需的值时:可以在单个查询中实现吗?
表科
- branch_Id INT主键
表系
- DEPT_ID INT主键
- branch_Id INT
表Branch_Desc
- branch_Id INT主键
- branch_Desc VARCHAR
TABLE Department_Desc
- departmen T_ID INT主键
- department_Desc VARCHAR
是否有可能在表中返回高于匹配值的列表如下要求:
“列出所有的分支部门,分公司的描述和部门描述至少有一个描述(分部或部门)符合期望值“?
这里的窍门是,查询应该返回仅匹配的描述,所以如果我们有以下情形:
Branch: 1, Desc: test
Branch: 2, Desc: another
Department: 1, Desc: another
Department: 1, Desc: something else
将所需的值是“另一个”查询应该返回:
Branch: 2, Branch Desc: another, Department: 1, Dept Desc: another
科说明:“测试”和DEPT说明“别的东西”不应该被返回,也不应科1.
假设表结构不能改变是否可以编写一个SQL查询来返回正确的结果?
到目前为止,我得到的最接近的是:
SELECT br.branch_id, bd.branch_desc, de.dept_id, dd.dept_desc
FROM branch br
LEFT JOIN branch_desc bd
ON bd.branch_id = br.branch_id
AND UPPER(br.branch_desc) = 'value'
JOIN department de
ON br.branch_id = de.branch_id
LEFT JOIN department_desc dd
ON de.dept_id = dd.dept_id
AND UPPER(dd.dept_desc) = 'value'
如果至少一个部门包含了“价值”然而,当任何部门包括所需的描述则没有行返回的描述(这将返回正确的值即使有一个分支的描述符合“价值”)
在这一点上,我认为两个单独的查询需要,实现在所有四个可能的方案正确的结果:
- 两个分公司和部门都包含与“价值”
- 唯一分支机构包含符合“价值”
- 只有系包含符合“价值”
- 无论是分公司,也没有系包含说明的是匹配值 这说明这说明该说明
如果这是可能的(我有一种感觉,它一定是),我将不胜感激任何指导正确的方向。
在此先感谢!
你为什么加入ON dd.dept_id = dd.dept_id和de.branch_id = de.branch_id?你几乎加入了同一张桌子。可能是你的问题。 – NonProgrammer
如果分支描述是“something”,并且该分支的部门名称是“another”,并且您在“another”上搜索,您希望它返回一行吗? – JNevill
或..如果“另一个”部门有15个分支。想要返回所有15个分支......或者您只需要知道有一个匹配的部门。如果你只需要知道有10个匹配的部门和2个匹配的分支,那么这将是两个单独的查询和一个联合将结果集合在一起......这正是我所掌握的。 – JNevill