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 和 cost 价格的单行。rateid 有一个唯一的行,所以 custprices 很好。

不幸的是,特定providerid 的costprice 可能不存在(在这种情况下我想使用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

(对于当前调用表中的每一行,应该只有 1 个 custprices 实例,这很容易,因为 ID 是唯一的,但问题是只获得了 1 个定价信息实例,与 providerid 和 ratetype 相关)

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 回答