0

誰かが助けることができれば、それは大いにありがたいです。

問題は、サブクエリ以外のものを参照できないように見えることです!?

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つだけ取得することです)

4

1 に答える 1

0

これを試してみてください、

SELECT  c.rateid, 
        c.providerid, 
        new1.ratetype, 
        new1.pricing_information
FROM    currentcalls AS c
        LEFT JOIN custprices d
            ON c.rateid = d.rateid
        LEFT JOIN 
        (
            SELECT  a.*
            FROM    costprices a
                    INNER JOIN
                    (
                        SELECT  ratetype, MAX(x.providerid) min_provid
                        FROM    costprices x
                                INNER JOIN currentcalls y
                                  ON x.providerid IN (y.providerid, 0)
                    ) b ON  a.ratetype = b.ratetype AND
                            a.providerid = b.min_provid
        ) AS new1 ON new1.ratetype = d.ratetype;
于 2013-03-03T12:01:23.493 に答える