以两个表为例:tbl_product
和tbl_transaction
。
tbl_product
列出产品详细信息,包括名称和ID,同时tbl_transaction
列出涉及产品的交易,包括日期,产品ID,客户等。
我需要显示一个网页,其中显示10个产品,每个产品的最近5个交易。到目前为止,LEFT JOIN
如果mysql允许该tx.product_id=ta.product_id
部分,则似乎没有任何查询有效,并且下面的子查询也可以工作( 在“
where子句”中
出现 Unknown列“ 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
问题内容: 我有一个表,我们称它为“ a”,它在涉及许多表的视图中用在左联接中。但是,我只想返回“ a”的行(如果它们也与另一个表“ b”联接)。所以现有的代码看起来像 但它返回的行太多,尤其是其中a在b中不匹配的行。我试过了 这给了我正确的结果,但是不幸的是,“ EXPLAIN PLAN”告诉我们,这样做会导致强制对a和b进行全表扫描,这使事情变得很慢。我的一位同事在b上建议了另一个LEFT J
我有一个表'gems'在那里存储帖子(例如blog)。对帖子的回复也存储在同一个表中,其中有一个字段存储父帖子的密钥。每个帖子都可以附上文件。 我需要得到一个与相关的回复和附加文件的帖子列表。因此“gems”有多个左联接--一个连接到它自己,一个连接到带有文件名的“gemdetail”。此查询有效: 但是,如果我每个帖子有20个回复和10个文件,那么返回的记录数是每个帖子200条。限制条款起作用,
问题内容: 我有两个表:gem和gemdetail保持连接状态。我试图将LEFT JOIN限制为gems表中的10条记录。也有两个其他表联接(gemreply和用户),但它们不会导致该问题。以下内容不起作用: 这将返回的行总数限制为10,但是由于每个gem有多个明细记录,所以我剩下不到10个gem记录。我已经阅读了每个“ LIMIT”帖子,但没有发现这种情况。 更新1:好的-感谢jviladric
问题内容: 这个问题已经在这里有了答案 : SQL Server中的LEFT JOIN与LEFT OUTER JOIN (12个答案) 5年前关闭。 之间有什么区别? 问题答案: 在MySQL中,它们是同一回事。A 是的同义词或缩写。
问题内容: 根据我对左外部联接的了解,结果表的行数永远不应超过左表的行数…如果这是错误的,请让我知道… 我的左表是192572行和8列。 我的右边表格是42160行和5列。 我的左表有一个名为“ id”的字段,该字段与我的右表中名为“键”的一列匹配。 因此,我将它们合并为: 但是组合的形状是236569。 我有什么误会? 问题答案: 如果键与另一个DataFrame中的多个行匹配,则可以预期这种情
问题内容: 这是一个简化的表结构: 一个产品可以有多张照片,每个产品的第一张产品照片(基于photo_order)是默认照片。 现在,我只需要产品详细信息页面上的所有照片,但是在列出多个产品的页面(例如产品目录页面)上,我只想显示默认照片。 因此,我要尝试的是查询产品列表,包括每个产品的默认照片。 这显然行不通,它将返回所有照片,其中每张照片都重复了产品信息: 我需要弄清楚如何做这样的事情,但是我