我有一个包含冗余条目的表。我需要的是 获取具有最大id数据的列,然后将表连接到users表并根据最大行user_id获取名称
SELECT id,labref,user_id FROM tracking_table t WHERE t.id =
(SELECT MAX(t2.id) FROM tracking_table t2, user u WHERE t.labref = t2.labref AND u.id = t2.user_id)
SQL查询:
id | labref | user_id
--------------------
2 | a | 3
--------------------
5 | b | 7
--------------------
结果:
Users Table
id | name
-------------
1 | ua
------------
2 | ub
------------
3 | uc
------------
4 | ud
------------
5 | ue
-------------
7 | uf
-------------
想加入下面的用户表
id | labref | name
--------------------
2 | a | uc
--------------------
5 | b | uf
--------------------
期望的结果应如下:
hane::tuple<typename Types::value_type...> combination;
关于我现在陷入困境的建议?
答案 0 :(得分:2)
您可以使用子查询查找每个实验室参考的最大id
值。然后,加入此子查询,为您提供所需的有效行。最后,将此连接到用户表以引入用户名。
SELECT
t1.id,
t1.labref,
u.name
FROM tracking_table t1
INNER JOIN
(
SELECT labref, MAX(id) AS max_id
FROM tracking_table
GROUP BY labref
) t2
ON t1.labref = t2.labref AND
t1.id = t2.max_id
INNER JOIN user_table u
ON t1.user_id = u.id
<强>输出:强>
在这里演示:
答案 1 :(得分:1)
请查看此声明。它符合您的需求吗?
SELECT t.id, t.labref, u.name
FROM tracking_table t
INNER JOIN users u
on t.user_id = u.id
WHERE t.id =
(SELECT MAX(t2.id)
FROM tracking_table t2, user u
WHERE t.labref = t2.labref AND u.id = t2.user_id)
答案 2 :(得分:1)
子查询中不需要users表。您在主查询中需要它:
SELECT t.id, t.labref, u.name
FROM tracking_table t
JOIN user u ON u.id = t.user_id
WHERE t.id = (SELECT MAX(t2.id) FROM tracking_table t2 WHERE t.labref = t2.labref);
顺便说一下,你不应该使用逗号分隔的连接。它们在1992年变得多余。改为使用显式ANSI连接。