当前位置: 首页 > 面试题库 >

对于最左边的表中的每一行,仅从最右边的表返回一行

壤驷穆冉
2023-03-14
问题内容

我有两张桌子。我想以一种方式将它们加入,即最左侧表中的每个记录只返回右侧表中的一个记录。我在下面提供了一个示例。我想避免使用子查询和临时表,因为实际数据约为4M行。我也不在乎最右边表中的哪条记录被匹配,只要一个或一个都不匹配即可。谢谢!

表用户:

-------------
| id | name |
-------------
| 1  | mike |
| 2  | john |
| 3  | bill |
-------------

表交易:

---------------
| uid | spent | 
---------------
| 1   | 5.00  |
| 1   | 5.00  |
| 2   | 5.00  |
| 3   | 5.00  |
| 3   | 10.00 |
---------------

预期输出:

---------------------
| id | name | spent |
---------------------
| 1  | mike | 5.00  |
| 2  | john | 5.00  |
| 3  | bill | 5.00  |
---------------------

问题答案:

使用:

  SELECT u.id,
         u.name,
         MIN(t.spent) AS spent
    FROM USERS u
    JOIN TRANSACTIONS t ON t.uid = u.id
GROUP BY u.id, u.name

请注意,这只会返回至少具有一个TRANSACTIONS记录的用户。如果要查看没有支持记录的用户以及有支持记录的用户,请使用:

   SELECT u.id,
          u.name,
          COALESCE(MIN(t.spent), 0) AS spent
     FROM USERS u
LEFT JOIN TRANSACTIONS t ON t.uid = u.id
 GROUP BY u.id, u.name


 类似资料:
  • 我知道函数(它将根据最短列表进行压缩)和(它将根据最长列表进行压缩),但我如何根据第一个列表进行压缩,无论它是否最长? 例如: 而且: 这两种功能是否都存在于一个功能中?

  • 问题内容: 我在MS Access中有两个表,我正在尝试为其中一个表添加一个字段,以告诉另一个表中的哪个记录的值小于第一个字段的值,但最接近?到目前为止,我有这个查询(只是一个select语句来测试输出,而不更改现有表),但是它列出了所有小于查询值的值: 我尝试使用诸如之类的东西,它将仅显示最大模块,但将其与上面的select语句结合使用,但它会说它只会返回一条记录。 期望的输出:我有一些记录,a

  • 问题内容: 我有一个pojo,尝试将csv文件中的数据读取到列表中,然后将其打印出来。从文件读取工作正常,在读取/添加的瞬间,我可以看到正确的ID,但是一旦尝试将其全部打印回来,我只会得到列表的最后一个元素。以下是我正在尝试的: 我从上面得到的输出是: 团队编号为:1 团队编号为:2 团队编号为:3 团队编号为:4 球队信息:4 球队信息:4 球队信息:4 球队信息:4 我想念什么..?为什么前三

  • 我有一个Flexbox。它的内容是NxN个正方形。我想要容器适合尽可能多的这些方块给定的显示宽度。我想让flexbox在页面中对齐。 然而问题是当我使用 则最后一行不向左对齐。但是,如果我更改为 则整个容器在页面上不再以中心对齐的方式显示。我能以某种方式实现两个的混合吗,所以就是这个例子,我将对齐5个项目,但最后一行将对齐前几行中的第一个项目? 最小再现:

  • 问题内容: 嗨,这对我来说是个棘手的问题。我有三张桌子。 一个包含手机号码和唯一的ID(tbldealermobiles) 其中一个包含购买日期,唯一的ID和其他详细信息(历史记录) 其中一个包含客户类型,唯一ID和其他详细信息。(tblAllDealers) 当我想显示购买了超过30天(如果是“ Outbound”)和购买超过60天(如果是虚拟)的客户时,就会出现问题。 我只想返回Jon和Jac

  • 它还会返回这个表,遗漏一些行(我希望它给出所有流派,而不仅仅是演员在其中扮演角色的流派): 有趣的是,它为“动画”返回了“0”,但为“儿童”或“喜剧”没有行,这是我正在寻找的结果(所有流派都返回了)。我做错了什么?