誰かが助けることができれば、それは大いにありがたいです。
問題は、サブクエリ以外のものを参照できないように見えることです!?
SELECT * FROM currentcalls AS c
LEFT JOIN custprices ON c.rateid = custprices.rateid
LEFT JOIN (SELECT * FROM costprices
WHERE costprices.ratetype = custprices.ratetype
AND (costprices.providerid = c.providerid OR costprices.providerid=0)
ORDER BY costprices.providerid DESC LIMIT 1) AS new1 ON new1.ratetype = custprices.ratetype
3つのテーブル:
currentcalls (rateid, providerid)
custprices (rateid, ratetype)
costprices (ratetype,providerid)
currentcallsからのすべての行と、custおよびcostpricesからの1つの行が必要です。rateidには一意の行があるため、custpricesは問題ありません。
ただし、残念ながら、特定のprovideridの原価が存在しない可能性があります(この場合、providerid = 0を使用します)。存在する場合は、providerid=0の結果は必要ありません。いずれにせよ、(costpriceからの)複数の行が返されることは望ましくありません。
SAMPLE DATA(pricing_informationは、選択したい複数のフィールドを表します)
currentcalls (rateid, providerid)
345 2
custprices (rateid, ratetype)
345 123
costprices (ratetype,providerid, pricing_information)
123 0 ????A
123 1 ????B
123 2 ????C
123 3 ????D
結果を次のようにします。
rateid,providerid,rateid,ratetype,ratetype,providerid,pricing_information
345 2 345 123 123 2 ??????C
また、provideridが存在しない場合、結果は次のようになります。
345 2 345 123 123 0 ??????A
(現在の呼び出しテーブルの各行には、IDが一意であるため簡単なcustpricesのインスタンスが1つだけあるはずですが、問題は、provideridとratetypeに関連するpricing_informationのインスタンスを1つだけ取得することです)