[英]GROUP_CONCAT in subquery yields unpredicable results
我在子查詢中的group_concat
語句有問題:
select group_concat(name separator " ")title,tmp.p_i
from (
select name,blog.db_blog_posts_title_words_evanhendler.p_i
from blog.db_blog_posts_title_words_evanhendler
join words.words_blog_posts_title
on blog.db_blog_posts_title_words_evanhendler.s_i=words.words_blog_posts_title.id
order by blog.db_blog_posts_title_words_evanhendler.id
)tmp
group by tmp.p_i
產生期望的結果:
+-------------------+------+
| title | p_i |
+-------------------+------+
| This is the title | 1 |
| This is the title | 2 |
| This is the title | 3 |
| This is the title | 4 |
+-------------------+------+
然而:
select title from blog.db_blog_posts_title_evanhendler left join (
select group_concat(name separator " ")title,tmp.p_i
from (
select name,blog.db_blog_posts_title_words_evanhendler.p_i
from blog.db_blog_posts_title_words_evanhendler
join words.words_blog_posts_title
on blog.db_blog_posts_title_words_evanhendler.s_i=words.words_blog_posts_title.id
order by blog.db_blog_posts_title_words_evanhendler.id
)tmp
group by tmp.p_i
)tmp
on blog.db_blog_posts_title_evanhendler.id=tmp.p_i;
產量:
+-------------------+
| title |
+-------------------+
| is the title This |
| This is the title |
| This is the title |
| This is the title |
+-------------------+
您需要在group_concat中有一個可選參數ORDER BY
。 您很幸運獲得該訂單的前幾次,但是額外的聯接導致引擎將其置於不同的順序。 所以....
GROUP_CONCAT(name ORDER BY Some_field_or_Fields_which_will_put_name_in_right_Order_For_you
SEPARATOR " " )
文件摘錄:
GROUP_CONCAT([DISTINCT] expr [,expr ...]
[ORDER BY {unsigned_integer | col_name | expr}
[ASC | DESC] [,col_name ...]]
[SEPARATOR str_val])
在MySQL中,您可以獲取表達式組合的串聯值。 若要消除重復的值,請使用DISTINCT子句。 要對結果中的值進行排序,請使用ORDER BY子句。 要以相反的順序進行排序,請在ORDER BY子句中將DESC(降序)關鍵字添加到要作為排序依據的列的名稱。 ...
同樣,如果您沒有什么可排序的東西來按正確的順序組合“名稱”,那么您就不走運了。 因為不能保證否則訂購!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.