首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >mysql order by select --可能吗?

mysql order by select --可能吗?
EN

Stack Overflow用户
提问于 2009-05-01 22:06:18
回答 3查看 30.8K关注 0票数 5

下面是我的表格设置:

代码语言:javascript
运行
复制
mysql> describe a;
+-------+------------+------+-----+---------+----------------+
| Field | Type       | Null | Key | Default | Extra          |
+-------+------------+------+-----+---------+----------------+
| id    | int(11)    | NO   | PRI | NULL    | auto_increment | 
| x     | int(11)    | YES  |     | NULL    |                | 
| y     | varchar(1) | YES  |     | NULL    |                | 
+-------+------------+------+-----+---------+----------------+
3 rows in set (0.01 sec)

mysql> describe b;
+-------+------------+------+-----+---------+----------------+
| Field | Type       | Null | Key | Default | Extra          |
+-------+------------+------+-----+---------+----------------+
| id    | int(11)    | NO   | PRI | NULL    | auto_increment | 
| a     | int(11)    | NO   |     | NULL    |                | 
| z     | varchar(1) | YES  |     | NULL    |                | 
+-------+------------+------+-----+---------+----------------+
3 rows in set (0.01 sec)

mysql> select * from a;
+----+------+------+
| id | x    | y    |
+----+------+------+
|  1 |    1 | a    | 
|  2 |    2 | b    | 
|  3 |    3 | c    | 
|  4 |    4 | d    | 
+----+------+------+
4 rows in set (0.01 sec)

mysql> select * from b;
+----+---+------+
| id | a | z    |
+----+---+------+
|  1 | 3 | q    | 
|  2 | 2 | a    | 
|  3 | 1 | u    | 
|  4 | 4 | x    | 
+----+---+------+
4 rows in set (0.01 sec)

这是我想要做的:

代码语言:javascript
运行
复制
mysql> select a.* from a, b where a.id = b.a order by b.z;
+----+------+------+
| id | x    | y    |
+----+------+------+
|  2 |    2 | b    | 
|  3 |    3 | c    | 
|  1 |    1 | a    | 
|  4 |    4 | d    | 
+----+------+------+
4 rows in set (0.00 sec)

但是,我想使用类似"SELECT * FROM a ORDER BY (SELECT A FROM B ORDER BY z)“这样的语法。

这个是可能的吗?

EN

回答 3

Stack Overflow用户

发布于 2012-02-09 03:55:08

只要子查询恰好返回1个结果,就可以按子查询进行排序,这意味着您需要连接子查询中的表。

我只是在我的应用程序中的查询构建器中设置了它,下面这样的代码应该可以为您工作:

代码语言:javascript
运行
复制
SELECT a.*
FROM a,b
WHERE a.id = b.a
ORDER BY (
   SELECT z
   FROM b
   WHERE a.id = b.a
) ASC
票数 11
EN

Stack Overflow用户

发布于 2009-05-01 22:32:58

代码语言:javascript
运行
复制
SELECT * FROM a ORDER BY (SELECT a FROM b ORDER BY z)

不,这不会让你得到你想要的。首先,子查询返回多行,因此它不能用作外部查询的ORDER BY中的表达式。这是您得到的错误:

代码语言:javascript
运行
复制
ERROR 1242 (21000): Subquery returns more than 1 row

此外,对于这种形式的查询,a的行和子查询中行的顺序之间没有相关性。换句话说,即使对子查询中的值进行了排序,也不会使外部查询的行按匹配顺序排序。

如果您试图确保在结果集中每行只有一行,如果为a (即使在b中有多个匹配的行),那么您可能需要这样:

代码语言:javascript
运行
复制
SELECT DISTINCT a.* 
FROM a JOIN b ON (a.id = b.a)
ORDER BY b.z;
票数 3
EN

Stack Overflow用户

发布于 2009-05-01 22:12:14

我真的不认为你描述的方式是可能的,我认为你需要加入到表中。

查查这个:http://www.w3schools.com/Sql/sql_join_inner.asp

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/813495

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档