mysql 查询两个表 进行排序_MySQL:从另一个表中使用两个计数进行排序...

SELECT

p.id,

p.user,

SUM(v.type * 2 - 1) AS votecount

FROM posts p

LEFT JOIN votes v ON p.id = v.postID

WHERE p.user = 'tim'

GROUP BY p.id, p.user

ORDER BY votes DESC

更新 – p和v解释.

在此查询中,p和v分别是帖子和投票的别名.别名本质上是一个替代名称,它仅在声明它的语句范围内定义(在本例中为SELECT语句).不仅表可以有别名,还有列.在此查询中,votecount是SUM(v.type * 2 – 1)表达式表示的列的别名.但目前我们只谈论桌子.

在继续关于表别名的解释之前,我将简要解释为什么你可能需要使用表名来为列名添加前缀,比如posts.id而不是id.基本上,当查询引用多个表时,就像在这种情况下一样,您可能会发现始终使用相应的表名称为列名添加前缀非常有用.这样,当您重新访问旧脚本时,您始终可以告诉哪个列属于哪个表,而无需查找引用的表的结构.此外,在省略表引用时必须包含表引用,这会导致列所属的表格不明确. (在这种情况下,引用id列而不引用posts表会产生不明确的情况,因为每个表都有自己的id.)

现在,当您在列名称之前写出完整的表名时,可能很难读取大而复杂的查询.这是(短)别名派上用场的地方:它们使查询更容易阅读和理解,虽然我已经知道并非所有人都有这种观点,所以你应该自己判断:this question包含两个版本的相同查询,一个具有长命名的表引用,另一个具有短名称的引用,以及一个意见(在对其中一个答案的评论中)为什么别名不适合.

无论如何,在这个特定查询中使用短表别名可能不如在一些更复杂的语句中那样有益.只是当查询引用多个表时,我习惯于对表进行别名.

This MySQL documentation article包含MySQL中别名表的官方语法(实际上与标准SQL中的相同).

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
>