我到处搜寻Google,并尝试了几个小时,我放弃了。。。我一生都找不到解决此问题的方法... #1054 - Unknown column 'bb.date' in 'where clause'
。我当然需要访问bb.date,但是我无法访问嵌套的LEFT JOIN中的别名“ bb”,但是我需要访问它。如何将别名传递到该范围?
SELECT
bb.date,
PP.max_sell_price_asofdate,
i.item_id,
bb.transaction_id
FROM items_transactions bb
LEFT JOIN items_transactions_details t
ON bb.transaction_id = t.transaction_id
LEFT JOIN items i
ON i.item_id = t.item_id
LEFT JOIN (
SELECT
pp.item_id,
MAX(pp.sell_price_asofdate) max_sell_price_asofdate
FROM items_prices pp
WHERE bb.date >= ss.sell_price_asofdate -- #1054 - Unknown column 'bb.date' in 'where clause'
GROUP BY pp.item_id
) PP ON PP.item_id = i.item_id
如果我提供我想用这些表及其某些相关字段完成的更多详细信息,可能会更好。即使我可以访问bb别名,我的查询似乎也不正确。基本上我想做的就是加入所有下表,并确保每个交易项都获得正确的sell_price。因此,例如,对于具有购买日期为2019-11-29的item_id 148的交易611,应以正确的sell_price 13进行合并,因为表item_prices中item_id 148的最新价格历史记录的更改日期为2019-11-28,即sell_price 13.当前,它错误地合并了每个商品的所有价格
表 items_transactions
表 items_transactions_details
表 items_prices
表项目
答案 0 :(得分:1)
您可以使用对外部表的引用,但不能使用与替代查询相同的from
子句中的表。例如,您可以将代理查询移至SELECT
子句:
SELECT
bb.date,
i.item_id,
bb.transaction_id,
(
SELECT
MAX(pp.sell_price_asofdate) max_sell_price_asofdate
FROM items_prices pp
WHERE
bb.date >= pp.sell_price_asofdate
and pp.item_id = i.item_id
GROUP BY pp.item_id
) max_sell_price_asofdate
FROM items_transactions bb
LEFT JOIN items_transactions_details t
ON bb.transaction_id = t.transaction_id
LEFT JOIN items i
ON i.item_id = t.item_id
请注意,代理查询的性能不是很好。没有代理查询:
SELECT
A.date, A.item_id, A.transaction_id ,
MAX(B.sell_price_asofdate) as max_sell_price_asofdate
FROM
(
SELECT
bb.date,
i.item_id,
bb.transaction_id
FROM items_transactions bb
LEFT JOIN items_transactions_details t
ON bb.transaction_id = t.transaction_id
LEFT JOIN items i
ON i.item_id = t.item_id
) A
LEFT OUTER JOIN
(
SELECT
pp.item_id,
pp.sell_price_asofdate
FROM items_prices pp
) B
ON
A.date >= B.sell_price_asofdate
and B.item_id = A.item_id
GROUP BY
A.date, A.item_id, A.transaction_id
答案 1 :(得分:0)
为显示Sell_price,可以使用:
SELECT
bb.date,
i.item_id,
bb.transaction_id,
(
SELECT
pp.sell_price
FROM items_prices pp
WHERE i.item_id = pp.item_id AND bb.date >= pp.sell_price_asofdate
ORDER BY pp.sell_price_asofdate DESC, pp.row_id DESC
LIMIT 1
) sell_price
FROM items_transactions bb
LEFT JOIN items_transactions_details t
ON bb.transaction_id = t.transaction_id
LEFT JOIN items i
ON i.item_id = t.item_id