2015-05-28 27 views
1

獲取意外的結果我有兩個表ss_test和ss_ceastore_config ss_test有字段名爲store_id映射到ss_ceastore_config id。 我的ss_test包含服務器條目,告訴它它使用的是哪個商店 所以我試圖找到哪個商店使用最小時間和它的ID。 我寫下面的查詢。使用分鐘(鍵)

select id, 
     min(server_counts) as server_counts, 
     isalive 
from (select ss_ceastore_config.id , 
       count(server_id)as server_counts, 
       ss_ceastore_config.isalive 
     from ss_test 
     right join ss_ceastore_config 
     on ss_test.store_id = ss_ceastore_config.id 
     group by store_id 
     order by id) join_1 

我的內部查詢給了我正確的結果如下

id Ascending server_counts isalive 
1     5    1 
2     0    1 

,所以我想用最小功能

id Ascending server_counts isalive 
2     0    1 

低於從內部查詢輸出記錄來選擇,但它給出了意想不到的結果我的外部查詢如下

id server_counts isalive 
1   0   1 

爲什麼這樣呢?爲什麼它給server_counts 0的id 1? 如何解決此查詢?

回答

2
select id, 
    server_counts, 
    isalive 
from (select ss_ceastore_config.id , 
      count(server_id)as server_counts, 
      ss_ceastore_config.isalive 
    from ss_test 
    right join ss_ceastore_config 
    on ss_test.store_id = ss_ceastore_config.id 
    group by store_id 
    order by id) join_1 
order by server_counts asc 
limit 1; 

原始查詢是行不通的,因爲你正在使用與非聚合列如idisalive沿MIN()功能做一個彙總SELECT。我相信MySQL不會保證其將會返回該值的最小值。

我的策略是通過server_counts返回升序排列所有行,然後到SELECT僅第一行(這是最低)。

+0

我沒有join_1表,它給出錯誤join_1'不存在 – Dipak

+1

@Dipak請檢查我更新的答案。 –

+0

哇的工作謝謝 – Dipak