用于选择不同数据的高级 SQL 查询
Posted
技术标签:
【中文标题】用于选择不同数据的高级 SQL 查询【英文标题】:Advanced SQL query to select distinct data 【发布时间】:2013-04-23 15:10:27 【问题描述】:我有两个表需要从中提取数据。 表1(t1)及样本值:
| rq_id | user_id | is_good |
|----- 1 |---- 223 |-------- 0 ---- |
|----- 3 |---- 223 |-------- 1 ---- |
|----- 4 |---- 239 |-------- 0 ---- |
|----- 5 |---- 223 |-------- 0 ---- |
Table2(t2)和样本值:
| rq_id | version | random_content |
|---1---|---3------|------A------|
|---1---|---2------|------B------|
|---1---|---1------|------C------|
|---3---|---2------|------D------|
|---3---|---1------|------F------|
|---5---|---2------|------X------|
|---5---|---1------|------W------|
table1中rq_id是唯一的,table2中有多行rq_id相同。
我需要从 Table2 中为每个 rq_id 获取 1 行(只有最高版本的行)。从 Table2 中选择 request_ids 的标准将来自 Table1,其中 user_id=223 和 is_good="0"。
所以在这种情况下,我希望它返回:|---1---|---3------|------A------|
和|---5---|---2------|------X------|
。
这可以在一个快速的 SQL 查询中完成吗?有一些关节和不同的选择/内部选择或其他任何东西?
【问题讨论】:
【参考方案1】:SELECT b.*
FROM Table1 a
INNER JOIN Table2 b
ON a.rq_ID = b.rq_ID
INNER JOIN
(
SELECT rq_id, MAX(version) max_ver
FROM table2
GROUP BY rq_id
) c ON b.rq_ID = c.rq_ID AND
b.version = c.max_ver
WHERE a.user_ID = 223 AND a.is_good = 0
SQLFiddle Demo
【讨论】:
以上是关于用于选择不同数据的高级 SQL 查询的主要内容,如果未能解决你的问题,请参考以下文章