在我正在进行的项目中,我坚持使用哈迪斯的桌面结构。要牢记两件事:
希望我可以解释这个问题,而不会让你的眼睛睁开眼睛,你的大脑会崩溃。
我们有一个实例表,它沿着这些行看起来(简化):
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
请注意,Table1中的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中没有一个条目,其中instanceID包含在field2中,而字段ID包含在field3中,我没有从field1获取数据
我已经看过连接,直到我脸色发青,当table3没有条目时,我看不到处理这种情况的方法。
答案 0 :(得分:2)
LEFT JOIN ...
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'
两个左连接应该处理没有其他行的情况......
答案 1 :(得分:1)
如果你发布了你的查询会有所帮助,因为我觉得你在这里的表格描述中有一些错误,所以不清楚这些表是如何连接的。
无论如何,您的查询中可能有内部联接(通常只写为JOIN
)。将其替换为左外连接(LEFT JOIN
)。它不需要右表包含行并返回NULL
而不是实际值。