mysql 加入 4 个表 return 空值

mysql joining 4 tables return null values

我有四个表的数据需要加入:维度、维度结果、产品和产品报告。我的目标是 select 属于产品的报告的所有维度(包括 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 不会 select 未报告的产品尺寸(即空值)。

我做了一个SQLfiddle进一步说明: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 参数的情况下完成,但至少这是有效的。

感谢您的快速回复!

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

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