mysql连接4个表返回空值

时间:2016-08-12 16:59:46

标签: mysql join left-join

我需要加入四个表中的数据:维度,维度结果,产品和产品报告。我的目标是为属于产品的报表选择所有维度(包括NULL),以便用户可以查看或编辑现有值或为空报表填写新值。

到目前为止,我已经尝试过:

SELECT d.DID, Nominal, r.`Result`, r.`PRID` 
FROM `Dimensions` d
JOIN `Products` x ON d.`PID` = x.`PID`
LEFT JOIN `DimensionResults` r ON d.`DID` = r.`DID`
JOIN `ProductReports` p ON r.`PRID` = p.`PRID` AND x.`PID` = p.`PID` 
WHERE r.`PRID` = 'PRID17ca-fe04-77ba-6ba8-94416f25197f' 

还有一些变化:没有最后一个连接上的AND和JOIN命令的其他一些序列,但不知何故SQL不会选择产品的未报告维度(即空值)。

我做了一个SQL小提琴来进一步澄清:http://sqlfiddle.com/#!9/42abe7/6

我没看到什么?

- 编辑: -

在Rahul的回答的帮助下,我想出来了:

SELECT d.DID, Nominal, r.`Result`, r.`PRID` 
FROM `Dimensions` d
JOIN `Products` x ON d.`PID` = x.`PID`
LEFT JOIN `DimensionResults` r ON d.`DID` = r.`DID`
AND r.`PRID` = 'PRID17ca-fe04-77ba-6ba8-94416f25197f' 
LEFT JOIN `ProductReports` p ON r.`PRID` = p.`PRID` AND x.`PID` = p.`PID`
WHERE d.`PID` = 'PID107ca-fe04-77ba-6ba8-94416f25197f'

给出了我正在寻找的结果。我认为没有传递PID参数也能做到,但至少可以这样做。

感谢您的快速回复!

1 个答案:

答案 0 :(得分:0)

WHERE条件(WHERE r.PRID = 'PRID17ca-fe04-77ba-6ba8-94416f25197f')移至JOIN ON条件,如下所示。检查修改后的小提琴http://sqlfiddle.com/#!9/42abe7/14

LEFT JOIN `DimensionResults` r ON d.`DID` = r.`DID`
AND r.`PRID` = 'PRID17ca-fe04-77ba-6ba8-94416f25197f'