如何在sql中进行嵌套查询

qfe3c7zg  于 2021-06-18  发布在  Mysql
关注(0)|答案(2)|浏览(336)

我正在尝试学习sql,虽然我正在慢慢学习如何查询数据,但我仍然停留在查询查询结果上。举个例子
我需要一个sql语句来做两件事。假设我有两个类似下面的表(表1借用了另一个关于堆栈溢出的示例)
表1:

ID  game   point  time
1    x      5     7:00
1    z      4     11:00
2    y      6     9:00
3    x      2     2:00
3    y      5     4:00
3    z      8     6:00
4    k      0     8:00

表2:

id  tv chan
1    cab  
2    trop  
3    start   
4    cab

我要做的第一件事是合并这些表中的某些列。我知道我可以选择这些列并对id进行内部连接
但是,我要做的第二件事是删除所有点值为0的行,然后只有点值最低的具有不同游戏名称的行。所以我希望最后一张table是这样的

id  game   point   tv chan    
1    z      4       cab
2    y      5       trop
3    x      2       start

谢谢

hsvhsicv

hsvhsicv1#

你可以这样做:

SELECT t1.ID, 
       t1.game, 
       t1.point, 
       t2.tv_chan 
FROM Table1 AS t1
INNER JOIN Table2 AS t2 ON t2.id = t1.id 
INNER JOIN (SELECT t11.game, MIN(t11.point) AS min_point  
            FROM Table1 AS t11 
            WHERE t11.point != 0 
            GROUP BY t11.game
           ) AS t3 ON t3.game = t1.game
                      AND t3.min_point = t1.point 
WHERE t1.point != 0
mf98qq94

mf98qq942#

您可以使用一个join和一个按id和game分组的子查询来获取min点

select t1.id, t1.game. t1.point, t2 `tv chan`
    from (
        select id, game,  min(point) point
        from table1
        where point > 0
        group by id, game
    ) t1 
    inner join table2 t2 on t1.id = t2.id

相关问题