mysql - 如何限制 LEFT JOIN 的结果

标签 mysql sql subquery left-join mysql-error-1054

以两个表为例:tbl_producttbl_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/

相关文章:

Mysql子查询速度很慢

mysql - 如何在更新查询MYSQL中合并具有相同id的两行

mysql - Sequelize 原始查询返回 TextRows 数组

mysql - Laravel Eloquent ORMWhere 语句在默认的created_at时间戳上进行日期时间戳比较

mysql - SQL - 如何在多个表上使用更多 COUNT?

MySql 动态列名

MySQL - 在另一个子查询中使用子查询结果

mysql - 通过查询获取组中每个组的总和

MySQL创建数据库的权限

javascript - 如何使用数据库中的值执行 JavaScript 事件?