edd*_*edu 18 mysql sql subquery left-join mysql-error-1054
以两个表为例:tbl_product
和tbl_transaction
.
tbl_product
列出产品详细信息,包括名称和ID,同时tbl_transaction
列出涉及产品的交易,包括日期,产品ID,客户等.
我需要显示一个显示10个产品和每个产品的网页,最后5个交易.到目前为止,没有LEFT JOIN
查询似乎工作,如果mysql可以允许该tx.product_id=ta.product_id
部分,下面的子查询将起作用(在'where子句'中出现未知列'ta.product_id'失败:[错误:1054]).
SELECT
ta.product_id,
ta.product_name,
tb.transaction_date
FROM tbl_product ta
LEFT JOIN (SELECT tx.transaction_date FROM tbl_transaction tx WHERE tx.product_id=ta.product_id LIMIT 5) tb
LIMIT 10
Run Code Online (Sandbox Code Playgroud)
有没有办法实现我需要的列表,而无需在循环中使用多个查询?
编辑:
这正是我需要的MySQL:
SELECT ta.product_id, ta.product_name, tb.transaction_date ...
FROM tbl_product ta
LEFT JOIN tbl_transaction tb ON (tb.product_id=ta.product_id LIMIT 5)
LIMIT 10
Run Code Online (Sandbox Code Playgroud)
当然这是非法的,但我真的希望不是!
这是排名函数非常有用的地方.不幸的是,MySQL还不支持它们.相反,您可以尝试以下内容.
Select ta.product_id, ta.product_name
, tb.transaction_date
From tbl_product As ta
Left Join (
Select tx1.product_id, tx1.transaction_id, tx1.transaction_date
, (Select Count(*)
From tbl_transaction As tx2
Where tx2.product_id = tx1.product_id
And tx2.transaction_id < tx1.transaction_id) As [Rank]
From tbl_transaction As tx1
) as tb
On tb.product_id = ta.product_id
And tb.[rank] <= 4
Limit 10
Run Code Online (Sandbox Code Playgroud)