我有2个表,A和B包含一些数据,例如
TABLE A TABLE B
+----+-------+ +----+------+--------+
| id | title | | id | a_id | status |
+----+-------+ +----+------+--------+
| 1 | apple | | 1 | 1 | 0 |
| 2 | eggs | | 2 | 1 | 1 |
+----+-------+ | 3 | 1 | 2 |
| 4 | 1 | 3 |
| 5 | 1 | 0 |
| 6 | 1 | 1 |
| 7 | 2 | 0 |
| 8 | 2 | 1 |
| 9 | 2 | 2 |
| 10 | 1 | 0 |
| 11 | 1 | 3 |
+----+------+--------+
我想从表A中选择水果并加入表B并获取最新状态记录(按ID)。
我的桌子包含大约10k的水果和100 + k的状态。
所以结果看起来像
+------+---------+------+--------+----------+
| a.id | a.title | b.id | b.a_id | b.status |
+------+---------+------+--------+----------+
| 1 | apple | 11 | 1 | 3 |
| 2 | eggs | 9 | 2 | 2 |
+------+---------+------+--------+----------+
我可以像这样使用sql脚本进行分组
SELECT * FROM a LEFT JOIN b ON a.id = b.a_id GROUP_BY a.id
但它从表B得到第一项,因此结果不正确。
答案 0 :(得分:2)
您可以使用substring_index()
/ group_concat()
技巧:
select a.title,
substring_index(group_concat(status order by id desc), ',', 1) as laststatus
from b join
a
on a.id - b.a_id
group by a.title;
编辑:
如果你只想要b中的 last 记录,你可以这样做:
select a.title, b.status
from b join
a
on a.id - b.a_id
order by b.id desc
limit 1;
答案 1 :(得分:0)
b.id
订购的所有产品SELECT *
FROM a
INNER JOIN b
ON a.ID = b.A_ID
ORDER BY b.ID desc;
只需1个注册。
SELECT * FROM A
INNER JOIN B
ON A.ID = B.A_ID
WHERE A.ID = (select max(B.A_ID) from B);