在我正在进行的项目中,我陷入了Hades的表结构中.请记住两件事:
>我现在无法更改表结构.我暂时坚持使用它.
>查询是动态生成的,而不是硬编码的.因此,当我要查询可以提取此数据的查询时,我真正要努力的是一种将生成所需查询的算法.
希望我能在不使您的眼睛呆滞和大脑爆裂的情况下解释问题.
我们有一个实例表,看起来(简化)如下:
Instances InstanceID active 1 Y 2 Y 3 Y 4 N 5 Y 6 Y
然后,沿着这些行有多个数据表:
Table1 InstanceID field1 reference_field2 1 John 5 2 Sally NULL 3 Fred 6 4 Joe NULL Table2 InstanceID field3 5 1 6 1 Table3 InstanceID fieldID field4 5 1 Howard 5 2 James 6 2 Betty
请注意,表1中的reference_field2包含对另一个实例的引用.
表2中的Field3有点复杂.它包含表3的fieldID.
InstanceID field1 field4 1 John Howard 2 Sally 3 Fred
问题是,在我当前拥有的查询中,我没有得到Fred,因为表3中没有fieldID 1和InstanceID 6的条目.因此,到目前为止,我能得到的最好的列表是
InstanceID field1 field4 1 John Howard 2 Sally
本质上,如果表1中有一个字段2的条目,而表3中没有一个包含field2中包含的instanceID和field3中包含的字段ID的条目,那么我不会从field1中获取数据.
我一直看着联接,直到脸色发青,并且当table3没有条目时,我看不到一种处理情况的方法.
最佳答案
左加入…
SELECT a.InstanceID,b.field1,d.field4
FROM instances AS a
JOIN Table1 AS b ON a.InstanceID = b.InstanceID
LEFT JOIN Table2 AS c ON b.reference_field2 = c.InstanceID
LEFT JOIN Table3 AS d ON (c.InstanceID = d.InstanceID AND c.field3 = d.fieldId)
WHERE a.active = 'Y'
左两个连接应该处理没有其他行的情况.