下面是我的表格设置:
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)这是我想要做的:
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)“这样的语法。
这个是可能的吗?
发布于 2012-02-09 03:55:08
只要子查询恰好返回1个结果,就可以按子查询进行排序,这意味着您需要连接子查询中的表。
我只是在我的应用程序中的查询构建器中设置了它,下面这样的代码应该可以为您工作:
SELECT a.*
FROM a,b
WHERE a.id = b.a
ORDER BY (
SELECT z
FROM b
WHERE a.id = b.a
) ASC发布于 2009-05-01 22:32:58
SELECT * FROM a ORDER BY (SELECT a FROM b ORDER BY z)不,这不会让你得到你想要的。首先,子查询返回多行,因此它不能用作外部查询的ORDER BY中的表达式。这是您得到的错误:
ERROR 1242 (21000): Subquery returns more than 1 row此外,对于这种形式的查询,a的行和子查询中行的顺序之间没有相关性。换句话说,即使对子查询中的值进行了排序,也不会使外部查询的行按匹配顺序排序。
如果您试图确保在结果集中每行只有一行,如果为a (即使在b中有多个匹配的行),那么您可能需要这样:
SELECT DISTINCT a.*
FROM a JOIN b ON (a.id = b.a)
ORDER BY b.z;发布于 2009-05-01 22:12:14
我真的不认为你描述的方式是可能的,我认为你需要加入到表中。
查查这个:http://www.w3schools.com/Sql/sql_join_inner.asp
https://stackoverflow.com/questions/813495
复制相似问题