当前位置: 首页 > 知识库问答 >
问题:

MySQL所有来自主表的结果和部分来自左联接的结果

楚知
2023-03-14

我有两张桌子。与文章编号相关的图像。还有一张照片上有文章编号

我想要做的是列出第一个表中的所有图像(navn)(它是一个特定的文章编号(art_id))和第二个表中的最多5个图像(其中文章编号(artid)出现在照片(fotostation)上)。

(我现在不知道该怎么做:)

这不起作用

SELECT i.* FROM ecs_article_images AS i 
LEFT JOIN 
( SELECT * FROM ecs_article_images_inneholder WHERE art_id = i.art_id LIMIT 0,5 ORDER BY dato DESC) AS inn ON inn.fotostation=i.fotostation                          
 WHERE i.art_id='MS174868' ORDER BY  nr, id DESC

表格:

CREATE TABLE `ecs_article_images` (
 `id` int(11) NOT NULL,
 `navn` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
 `nr` int(11) NOT NULL,
 `art_id` varchar(40) COLLATE utf8_unicode_ci NOT NULL,
 `type` varchar(10) COLLATE utf8_unicode_ci NOT NULL,
 `fotostation` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
 `dato` datetime NOT NULL,
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

CREATE TABLE `ecs_article_images_inneholder` (
 `id` int(11) NOT NULL,
 `fotostation` varchar(150) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
 `artid` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
 `dato` datetime NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

这些表与fotostation字段相关。要在“ECS_article_images_inneholder”中找到具有artid的文件的名称,我必须在“ECS_article_images”中查找具有相同FOTOSTATION的navn。

共有1个答案

陆栋
2023-03-14

可以使用row_number()枚举行。我不确定这两张表有什么关系。下面假设它同时在文章和foto站上:

SELECT i.*
FROM ecs_article_images i LEFT JOIN 
     (SELECT inn.*,
             ROW_NUMBER() OVER (PARTITION BY inn.art_id, inn.fotostation ORDER BY dato DESC) as seqnum
      FROM ecs_article_images_inneholder inn
      WHERE  LIMIT 0,5 ORDER BY dato DESC) AS inn ON  
     ) inn
     ON inn.art_id = i.art_id AND
        inn.fotostation = i.fotostation AND
        inn.seqnum <= 5                      
 WHERE i.art_id = 'MS174868'
 ORDER BY  nr, id DESC;

关键是partition by键需要匹配join键。

 类似资料:
  • 我有以下两个表格: 我的代码是: 说明:表“预付款”为预付款表,“贷款”为贷款账户表。预付款可用于同一目的多次(此处用于购买产品)。每个预付款由预付款id标识。由于两个预付款用于相同的目的(此处用于购买产品),它们将具有相同的预付款id。另一方面,贷款是针对任何预付款进行的。贷款也可以采取多次对同一预付款。如果要偿还任何贷款,则会将其插入预付款id的“存款金额”列中。 在loan_page.php

  • 问题内容: 我想添加代表其他表计数的列。 我有3张桌子。 留言内容 主题 星星_吉文 我要结束于: Topic_Review 因此,基本上我想在3列中附加唯一值的计数(每个主题中给定的星数,在主题中具有消息的唯一用户以及每个主题中的唯一消息数)。 我希望最终也能够过滤类别(在两列中均可见)。 此外,我最终希望按加入的人数进行排序。例如,我将要有一个按钮,该按钮按升序按“星数”排序,或按降序按“用户

  • 问题内容: 我已经在远程Ubuntu计算机上安装了MySQL服务器。通过以下方式在表中定义用户: 我可以使用标准客户端从同一远程计算机命令行界面与用户访问。现在,我想 允许来自Internet上每台主机的root用户访问权限 ,因此我尝试添加以下行(这与上一转储的第一行完全相同,但该列除外): 但是我个人PC上的客户端继续告诉我(我掩盖了服务器IP): SQL错误(2003):无法连接到“ 46.

  • 问题内容: 我究竟做错了什么?我无法获得子属性内标签的值。这是我的xml: 这是我在节点中所做的: 我确定那是一个语法问题,但我看不到它!它有可能获得两个孩子的名字,例如标题和文本? 问候 问题答案: 使用的语法允许您浏览JSON对象的节点。但是似乎您正在尝试搜索将其视为XPath谓词。它不会工作。 使用xml2js可以使用以下代码在代码中获取对象数组: 然后,循环比较该值,这就是达到属性的方式。

  • 我对以下查询有问题: 这个想法是把包括邮资在内的订单总价拿回来。 已订购的项目-包括所有已订购的项目(因此可以有多行) 订单-包括订单的邮资价格(这里每个订单只有一行) 我遇到的问题是,如果订单中包含多个“ordered_items”项目,则上述金额会多次计算“orders”中的邮资。 如何重写此查询,使邮资只计算一次? 提前感谢任何帮助。

  • 问题内容: 根据我对左外部联接的了解,结果表的行数永远不应超过左表的行数…如果这是错误的,请让我知道… 我的左表是192572行和8列。 我的右边表格是42160行和5列。 我的左表有一个名为“ id”的字段,该字段与我的右表中名为“键”的一列匹配。 因此,我将它们合并为: 但是组合的形状是236569。 我有什么误会? 问题答案: 如果键与另一个DataFrame中的多个行匹配,则可以预期这种情