2016-08-12 7 views
0

私が参加する必要がある4つのテーブルのデータがあります:ディメンション、dimensionresults、プロダクトとproductreportsです。私の目標は、製品に属するレポートのすべてのディメンション(NULLを含む)を選択して、ユーザーが既存の値を表示または編集したり、空のレポートの新しい値を入力できるようにすることです。4つのテーブルを結合しているmysqlがnull値を返します

これまでのところ、私が試してみました:JOINのコマンドのためにすることなく、かつ最後の結合および他のいくつかの配列に何とかSQLは、報告されていない寸法を選択しません。

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' 

そして、それにはいくつかのバリエーションを(すなわち、ヌル値)。

私はさらに明確にするSQLのフィドルをした:http://sqlfiddle.com/#!9/42abe7/6

私は何を見ていないのですか?

--edit: -

ラーフルの答えの助けを借りて、私はそれを考え出した:

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

上記の例では、Product1としてProduct1に属するすべてのディメンションがレポート '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

NULL値を示しますが、製品2の一部である '379af7 ...'ディメンション( 'PID207 ...) – Voortman

関連する問題