以两个表为例: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”:[ERROR: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
有没有一种方法可以在循环中不使用多个查询来实现我需要的列表?
编辑:
这正是我需要从 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
当然这是违法的,但我真的希望不是这样!
最佳答案
这就是排名函数非常有用的地方。不幸的是,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
关于mysql - 如何限制 LEFT JOIN 的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3348705/