2016-08-12 132 views
0

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

到目前为止,我曾尝试:

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' 

还有一些变化,这些变化:没有并在最后加入,为JOIN命令,但不知何故SQL不会选择不报告的尺寸略有其他序列的产品(即空值)。

我已经做了SQL小提琴进一步明确:http://sqlfiddle.com/#!9/42abe7/6

什么我没有看到?

- 编辑: -

随着拉胡尔的答案的帮助下,我想通了:

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参数的情况下完成,但至少可以这样做。

感谢您的快速响应!

+0

您的预期输出是什么? – 1000111

+0

在上面的示例中:属于产品1的所有维度与产品1在报告'PRID17ca ....'中报告相同 – Voortman

回答

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' 
+0

虽然它也显示维度'379af7 ...',它是产品2的一部分(“PID207 ...) – Voortman