我有几个查询联合在一起,它们都共享相同的密钥 - pe_num(整数)。我在任何地方都使用UNION,但是子查询本身也有INNER JOINS(它们正在寻找与该对象链接的其他表中某种类型的实例),所以如果这个对象没有某种类型的实例,相应的查询将返回no结果。结果表必须以某种方式具有所有pe_num,例如如果此对象没有任何类型的实例,则必须添加空行(仅一行空行),如果存在类型1的实例,但没有类型2的实例,则类型2的查询不能返回空行。
如果我有十六个具有不同pe_num的对象,则所有十六个数字必须在表格中(它们有时会重复,但不能丢失)。
实现这一结果的一般方法是什么?
答案 0 :(得分:0)
我不确定我是否正确地阅读了您的问题,但在我看来,您有一个模拟某些继承关系的数据库模式,因此我将假设其余的答案。
你的问题(如果我理解的话)是关于如何确定某些对象集合是哪些派生类的实例 - 所讨论的对象在基表中,主键为pe_num,派生表都有pe_num的外键。
期望的结果 - 列:pe_num,derived_class;每个pe_num返回至少一行;如果没有该pe_num的派生实例,'derived_class'为NULL
策略:遵循涉及UNION的基本过程(如上所述),以查找基础对象是其实例的所有派生类。如您所述,可能会丢失一些行。所以'LEFT JOIN'所需的行到子类结果('LEFT JOIN'类似于'INNER JOIN'但是如果它在右侧找不到匹配的行,它只是插入一个带有左边值的行和一个右边的NULL - joins in MySQL):
SELECT pe_num, derived_class
FROM base_table
LEFT JOIN ( ** some complicated subquery involving UNION's as mentioned in OP **)
USING (pe_num)