在"UNION"上应用"ORDER BY"(Mysql)

Qui*_*che 11 mysql union sql-order-by

美好的一天.所以,每个标志都在标题:)

我希望合并两个请求的结果并将结果排序在一起(因为不是一个接一个).=>我正在考虑应用一个联合并订购它们.它没用.

我在这里看了一下Stack或者这里的developpez(!!法国网站).我尝试了不同的例子和建议,但没有成功.从我的红色看来,这是因为我正在研究Mysql.

无论如何,这是我的尝试,结果:

我原来的2个要求

SELECT * FROM user_relation WHERE from_user_id = 1
List item
SELECT * FROM user_relation WHERE to_user_id = 1
Run Code Online (Sandbox Code Playgroud)

这个列表的结果由teh frist select(由索引键编排)的结果组成,后面是由Index KEy排序的第二个选择的结果.

尝试1:

(SELECT * FROM user_relation WHERE from_user_id = 1 ORDER BY trust_degree)
UNION
(SELECT * FROM user_relation WHERE to_user_id = 1 ORDER BY trust_degree)
Run Code Online (Sandbox Code Playgroud)

请求已运行,但结果与原始请求相同:首先选择的结果(按索引键排序),然后是第二个请求的结果

尝试2:

(SELECT * FROM user_relation WHERE from_user_id = 1 ORDER BY trust_degree)
UNION
(SELECT * FROM user_relation WHERE to_user_id = 1 ORDER BY trust_degree)
ORDER BY trust_degree
Run Code Online (Sandbox Code Playgroud)

=>请求运行,结果为尝试1,但警告我的Mysql逻辑:(已经分析了这种类型的关闭(ORDER BY))

尝试3

(SELECT * FROM user_relation WHERE from_user_id = 1
UNION
SELECT * FROM user_relation WHERE to_user_id = 1)
ORDER BY trust_degree
Run Code Online (Sandbox Code Playgroud)

=>不要运行,但是错误#1064 - UNION附近的语法错误

尝试4:

SELECT *
FROM (
(SELECT * FROM user_relation WHERE from_user_id = 1)
UNION
(SELECT * FROM user_relation WHERE to_user_id = 1)
)
ORDER BY trust_degree 
Run Code Online (Sandbox Code Playgroud)

=>不要运行,并列出一个很好的6错误列表.有什么建议吗?

Mic*_*nst 14

SELECT *
FROM (
(SELECT * FROM user_relation WHERE from_user_id = 1)
UNION
(SELECT * FROM user_relation WHERE to_user_id = 1)
) AS i
ORDER BY trust_degree
Run Code Online (Sandbox Code Playgroud)

您必须为您的选择分配一个别名。但是在这种情况下,a UNION并不是必须的,可以用简单的代替OR,就像@Karoly Horvath在他的评论中指出的那样。结果查询如下所示:

SELECT 
 * 
FROM user_relation 
WHERE from_user_id = 1 OR to_user_id = 1 
ORDER BY trust_degree
Run Code Online (Sandbox Code Playgroud)


axi*_*iac 6

它写在以下文档中UNION

要应用ORDER BYLIMIT应用于个人SELECT,请将子句放在括在括号内的括号内SELECT

(SELECT a FROM t1 WHERE a=10 AND B=1 ORDER BY a LIMIT 10)
UNION
(SELECT a FROM t2 WHERE a=11 AND B=2 ORDER BY a LIMIT 10);
Run Code Online (Sandbox Code Playgroud)

...

ORDER BY对单个SELECT语句的使用不暗示行在最终结果中出现的顺序,因为UNION默认情况下会产生一组无序的行。

...

要使用ORDER BYor LIMIT子句对整个UNION结果进行排序或限制,请在各个SELECT语句后加上括号,然后将ORDER BYLIMIT放在最后一个之后。下面的示例使用两个子句:

(SELECT a FROM t1 WHERE a=10 AND B=1)
UNION
(SELECT a FROM t2 WHERE a=11 AND B=2)
ORDER BY a LIMIT 10;
Run Code Online (Sandbox Code Playgroud)

如前所述,不带括号的语句等效于一个带括号的语句。

通过将上述信息应用于您的查询,它变为:

(SELECT * FROM user_relation WHERE from_user_id = 1)
UNION
(SELECT * FROM user_relation WHERE to_user_id = 1)
ORDER BY trust_degree
Run Code Online (Sandbox Code Playgroud)