【问题标题】:mysql - Limit a query with left joinmysql - 使用左连接限制查询
【发布时间】:2017-04-22 18:35:30
【问题描述】:

我有 2 个这样的表:

餐桌人

id | name
---------
1  | john
2  | mike
3  | carl
4  | keny
5  | anna

桌车

owner | vechicle
----------------
1     | RTA457
3     | GSW684
3     | GKI321
3     | SNE798
5     | YTT662

所以,我想对两个表进行查询,如下所示:

SELECT * FROM person LEFT JOIN vehicle ON person.id=vehicle.owner

得到这些结果

id | name | owner | vechicle
----------------------------
1  | john | 1     | RTA457
2  | mike | NULL  | NULL
3  | carl | 3     | GSW684
3  | carl | 3     | GKI321
3  | carl | 3     | SNE798
4  | keny | NULL  | NULL
5  | anna | 5     | YTT662

最后,我想限制为 3 人,显示他们所有的车辆,如下所示:

id | name | owner | vechicle
----------------------------
1  | john | 1     | RTA457
2  | mike | NULL  | NULL
3  | carl | 3     | GSW684
3  | carl | 3     | GKI321
3  | carl | 3     | SNE798

有什么办法吗?

【问题讨论】:

  • 你想如何决定限制哪三个人?您需要以某种方式订购您的查询。因此,一般来说,您可以从 Person where XXX order by xxxx limit 3 中选择 ID。将其结果用作子查询以从车辆表中进行选择。
  • 前3个,就像一个“LIMIT 3”,顺序不相关。子查询的想法听起来不错,遗憾的是我不知道该怎么做。

标签: mysql left-join limit


【解决方案1】:

可能有助于子查询

SELECT
    *
FROM
    (SELECT * FROM person LIMIT 3) t
LEFT JOIN vehicle ON t.id = vehicle.owner

【讨论】:

  • 这对我有用,是个好主意,我可以添加更多像这样用逗号分隔的子查询。
【解决方案2】:

没试过,不过是这样的:

SELECT * FROM person
LEFT JOIN vehicle ON person.id = vehicle.owner
WHERE person.id IN (SELECT ID FROM PERSON LIMIT 3);

【讨论】:

  • 它给了我这个错误:“子查询返回超过 1 行”
  • 已更正。将 = 更改为 IN
【解决方案3】:

您可以简单地这样查询:

SELECT * FROM person LEFT JOIN vehicle ON person.id=vehicle.owner LIMIT 10;

这个SO 也很方便。希望这会有所帮助!

【讨论】:

  • 谢谢,如何限制3人? (就像例子一样)
  • @stramin 您可以简单地将 10 更改为 3。如果我的回答帮助您投票或回答了您的问题,请将其标记为答案,以便它可以帮助其他人。谢谢:)
猜你喜欢
  • 2023-03-02
  • 2016-08-30
  • 2013-11-02
  • 2018-10-15
  • 1970-01-01
  • 1970-01-01
  • 2016-08-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多