Mysql 从一个表中获取所有记录,再加上第二个表的相对最后一条记录
情况(简化): 表aMysql 从一个表中获取所有记录,再加上第二个表的相对最后一条记录,mysql,sql,Mysql,Sql,情况(简化): 表a id | id_device ----+---------- ... | 10 ... | 11 ... | 12 表B id | id_device | val ----+-----------+---- ... | 10 | 200 ... | 10 | 105 ... | 10 | 120 ... | 11 | 80 预期结果:来自表A的所有记录,对于表A的每条记录,表B上的最后一条相对记录 id_dev
id | id_device
----+----------
... | 10
... | 11
... | 12
表B
id | id_device | val
----+-----------+----
... | 10 | 200
... | 10 | 105
... | 10 | 120
... | 11 | 80
预期结果:来自表A
的所有记录,对于表A
的每条记录,表B
上的最后一条相对记录
id_device | val
----------+-----
10 | 120
11 | 80
12 | null
我试过这样做,但无法正确获取最后一张唱片:
SELECT tableA.*,
tableB.*
FROM tableA
LEFT JOIN (
SELECT id_device,
val,
MAX(id)
FROM tableB
GROUP BY id_device
) AS tableB
ON tableA.id_device = tableB.id_device
您的子查询正在从
表B
中选择MAX(d)
,以及id\u设备
和val
的待定值。当MAX(id)
时,它不会选择整个记录。为此,您需要选择MAX(id)
,然后基于它加入。您可以通过使用简单的降序并选择最上面的一行来实现这一点:
SELECT tableA.id_device, tableB.val
FROM tableA
LEFT JOIN tableB ON tableB.id = (SELECT id
FROM tableB
WHERE tableA.id_device = tableB.id_device
ORDER BY id DESC
LIMIT 1)
这允许您从表B
中选择多个字段,但如果您只对val
这样的单个字段感兴趣,您也可以直接从子查询中选择它,而不是加入子查询:
SELECT tableA.id_device, (SELECT val
FROM tableB
WHERE tableA.id_device = tableB.id_device
ORDER BY id DESC
LIMIT 1) AS val
FROM tableA
您的子查询正在从
表B
中选择MAX(d)
,以及id\u设备
和val
的待定值。当MAX(id)
时,它不会选择整个记录。为此,您需要选择MAX(id)
,然后基于它加入。您可以通过使用简单的降序并选择最上面的一行来实现这一点:
SELECT tableA.id_device, tableB.val
FROM tableA
LEFT JOIN tableB ON tableB.id = (SELECT id
FROM tableB
WHERE tableA.id_device = tableB.id_device
ORDER BY id DESC
LIMIT 1)
这允许您从表B
中选择多个字段,但如果您只对val
这样的单个字段感兴趣,您也可以直接从子查询中选择它,而不是加入子查询:
SELECT tableA.id_device, (SELECT val
FROM tableB
WHERE tableA.id_device = tableB.id_device
ORDER BY id DESC
LIMIT 1) AS val
FROM tableA
您需要从内部SQL(子查询或deliverd表)中更改使用MAX(id)的ON子句(首先将其别名为MAX_id)
在tableA.id_device=tableB.id_device和tableA.id=tableB.max_id
您不能正确获取最后一条记录是什么意思?您需要从内部SQL(子查询或deliverd表)更改使用max(id)(将其别名为max_id)的ON子句在tableA.id_设备=tableB.id_设备和tableA.id=tableB.max_id
您不能正确获取最后一条记录是什么意思?这非常有效。我将使用第一个,我必须选择表b的几个字段。这非常有效。我将使用第一个,我必须选择表b的几个字段。