我有两张桌子,想要做以下事情。从第一个表中我提取满足给定条件的所有行。对于所有提取的行,我从第一列中获取值。对于每个值,我从第二个表中提取包含第一列中给定值的所有原始数据。从第二个表中提取的所有原始数据必须以特定方式排序,我只想采取第一行(根据排序标准)。这是我的问题,我不知道如何采用具有最高排序标准值的行。
ADDED
第一张表:
| aaa | Bob |
| bbb | Eva |
| ccc | Bob |
第二张表:
| aaa | 111 | 1 |
| aaa | 342 | 2 |
| ccc | 576 | 1 |
| ccc | 749 | 3 |
从第一个表中我获取包含Bob的所有行。这些行中的第一列包含以下值:“aaa”和“ccc”。对于第二个表中的“aaa”,我有两行,我想在最后一列中获取具有最大值的那些行。所以,我有|aaa|342|2|
。和“ccc”一样。我拿这一行| ccc | 749 | 3 |。最后我想根据最后一列的值排序两行。
已添加2
我刚刚意识到问题的实质如下。在给定的表中,我想将第一列中包含相同值的所有行替换为一个“代表”行(在第三列中具有最大值)。更多细节,我想替换这个表:
| aaa | 111 | 1 |
| aaa | 342 | 2 |
| ccc | 576 | 1 |
| ccc | 749 | 3 |
通过这个:
| aaa | 342 | 2 |
| ccc | 749 | 3 |
答案 0 :(得分:2)
select t2.*
from t1
join t2 on t2.id = (select t2c.id
from t2 as t2c
where t2c.t1_id = t1.id
order by t2c.val desc
limit 1)
where t1.name = 'Bob'
order by t2.val
你没有指定列名,所以我做了它们。
t2.id
必须是唯一的。
答案 1 :(得分:1)
这可以使用相关子查询来实现,但性能会很糟糕。
mysql> select * from user;
+--------+-----------+
| userid | user_name |
+--------+-----------+
| aaa | Bob |
| bbb | Eva |
| ccc | Bob |
+--------+-----------+
3 rows in set (0.00 sec)
mysql> select * from user_data;
+--------+-------+------+
| userid | value | num |
+--------+-------+------+
| aaa | 111 | 1 |
| aaa | 342 | 2 |
| ccc | 576 | 1 |
| ccc | 749 | 3 |
| bbb | 1000 | 1 |
| bbb | 800 | 2 |
+--------+-------+------+
6 rows in set (0.00 sec)
mysql> SELECT u1.userid,u1.user_name,ud1.value from user_data ud1 join user u1 ON ud1.userid=u1.userid where ud1.value=(SELECT value FROM user_data ud2 WHERE ud2.userid=ud1.userid ORDER BY value desc LIMIT 1) AND u1.user_name='Bob';
+--------+-----------+-------+
| userid | user_name | value |
+--------+-----------+-------+
| aaa | Bob | 342 |
| ccc | Bob | 749 |
+--------+-----------+-------+
2 rows in set (0.00 sec)