P00LR0CK:
table: p
p_id/t_id/
1,35
2,35
3,35
4,35
5,35
6,22
7,22
...
テーブルpに対して、P_ID可能なすべての値が登録されています
table: mps
p_id/m_id/value
2,1001,0
4,1001,2
7,1005,1
...
テーブルのために:MPS、P_IDのほんの一部の値が登録されています。
どのように我々はできる2つのテーブルを結合し、次の文で?
出力は:しなければならP_ID、M_IDと値。
入力:M_ID(例:1001)およびt_id(すなわち:35)。
これは、すべてのP_IDの組み合わせを表示すると、それはテーブルのMPSのデータが見つからない場合は、単に表示nullを持っています。
output example:
p_id, m_id, value
1,1001,null
2,1001,0
3,1001,null
4,1001,2
5,1001,null
私は別のSQLクエリを試してみましたが、私はP_IDがテーブルMPSに登録されていない出力を取得していない午前:
SELECT p.p_id, mps.value, mps.m_id
FROM p LEFT JOIN
mps
ON p.p_id = mps.p_id
WHERE p.t_id = 35 AND mps.m_id=1001
ニック:
あなたが取得しますので、NULL
任意のためのMPS値p_id
にされていないがmps
、あなたがする必要があるCOALESCE
の価値m_id
それはに等しい作るため1001
の値のためp_id
ではありませんでmps
:
SELECT p.p_id, COALESCE(mps.m_id, 1001) AS m_id, mps.value
FROM p
LEFT JOIN mps ON p.p_id = mps.p_id AND mps.m_id = 1001
WHERE p.t_id = 35
ORDER BY p.p_id
出力:
p_id m_id value
1 1001 (null)
2 1001 0
3 1001 (null)
4 1001 2
5 1001 (null)
代替的に(ように繰り返さない1001
値)ことができますCROSS JOIN
からなる派生テーブルにm_id = 1001
、その後LEFT JOIN
にmps
:
SELECT p.p_id, m.m_id AS m_id, mps.value
FROM p
CROSS JOIN (SELECT 1001 AS m_id) m
LEFT JOIN mps ON p.p_id = mps.p_id AND mps.m_id = m.m_id
WHERE p.t_id = 35
ORDER BY p.p_id
出力は、前のクエリと同じです。SQLFiddleのデモ