簡體   English   中英

子查詢中的GROUP_CONCAT產生不可預測的結果

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM