使用 INNER JOIN 获取最后一条记录

Get the last record with INNER JOIN

我正在尝试获取最后一条记录,但我得到了第一条记录。 我做错了什么?

我的Table权限

|id|pid|uid|
| 1| 2 | 2 |
| 2| 5 | 2 |

我的Table水果

|id|pid|number1|number2|
|1 | 1 | 50    | 100   |
|2 | 1 | 10    | 100   |
|3 | 1 | 100   | 100   |    <== Try get last record

我想获取最后一条记录,但是我不能。

我创建了查询,但不起作用:

SELECT DISTINCT(fruits.pid), permission.pid, fruits.number1, fruits.number2 
FROM permission 
LEFT JOIN fruits ON permission.pid = fruits.pid 
WHERE permission.uid = '2' 
GROUP BY fruits.pid 
ORDER BY fruits.id DESC

我需要结果:

|pid|pid|number1|number2|
|3  | 1 | 100   | 100   |

您的连接没有连接任何行。 fruits.pid 的值始终为 1。permissions.pid 的值是 (2, 5)。因此,您的 fruits.pid = permission.pid 连接找不到任何匹配的行,因此您没有得到预期的结果。如果您在查询中删除 DISTINCT 并删除 GROUP BY(这会导致它在 MySQL 8 中失败),您的查询将生成:

pid     pid number1 number2
null    2   null    null
null    5   null    null

你要的行不在结果集中,你当然得不到。

您遇到的另一个问题是数字 3 不在 fruits.pid 列中。这是一个 id 值,所以我怀疑您加入了错误的领域。并且您已将 permission.pid 作为查询的第二个字段 return,但该列仅包含 2 和 5,如前所述,但您希望此处的值为 1;因此,您似乎希望 return fruits.pid 作为结果集的第二列。所以像:

SELECT fruits.id, fruits.pid, fruits.number1, fruits.number2 
FROM fruits 
LEFT JOIN permission
  ON permission.id = fruits.pid 
WHERE permission.uid = '2' 
ORDER BY fruits.id DESC

db<>fiddle here