2009-05-01 5 views
3

Вот мои настройки таблицы:заказ mysql по выбору - возможно?

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 в ORDER BY (выберите из Ь ORDER BY z) ".

Возможно ли это?

+2

чем проблема только с помощью «выбрать * из а, б, где a.id. = ba order by bz; "? – tpdi

+1

Кроме уродливого старого стиля, то есть. – tpdi

ответ

2

Я действительно не думаю, что это возможно, как вы его описываете, я думаю, что вам нужно будет присоединиться к столам.

Посмотрите это вверх: http://www.w3schools.com/Sql/sql_join_inner.asp

+0

http://w3fools.com/ – Sparkup

1
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; 
6

Сортировка по Подзапрос возможен, если Подзапрос возвращает ровно 1 результат, что означает, что вам нужно присоединиться к таблицам внутри подзапроса.

Я просто настроить это в запросе-строителем в моем приложении, что-то, как это должно работать для вас:

SELECT a.* 
FROM a,b 
WHERE a.id = b.a 
ORDER BY (
    SELECT z 
    FROM b 
    WHERE a.id = b.a 
) ASC 
Смежные вопросы