簡體   English   中英

在sub子選擇MySQL的地方

[英]WHERE in sub subselect MySQL

表“計划”

 id name 1 abc 2 def 3 ghi 

表“時間表”

 id fk_store fk_plan 1 4 1 2 4 1 3 4 1 4 6 1 5 6 1 6 5 3 7 7 3 8 7 3 9 12 1 

這是我的查詢:

SELECT plan.id as id, name, 
(SELECT GROUP_CONCAT(cnt) cnt FROM (SELECT COUNT(*) cnt 
FROM schedule WHERE fk_plan = plan.id GROUP BY fk_store) q) as schedule_count  
FROM plan LEFT JOIN schedule ON plan.id = schedule.fk_plan GROUP BY plan.id

我期待這個結果(例如在數組中):

 [0] = array(
    ['id'] = 1,
    ['name'] = 'abc',
    ['schedule_count'] = '3, 2, 1'
 ),

 [1] = array(
    ['id'] = 2,
    ['name'] = 'def',     
    ['schedule_count'] = ''
),

 [2] = array(
    ['id'] = 3,
    ['name'] = 'ghi',     
    ['schedule_count'] = '2,1'
),

不幸的是我收到一個錯誤,即WHERE子句中的column plan.id未定義。 當我不使用WHERE時,結果'schedule_count'在每個數組中都是'3,2,2,1,1'。 我發現了許多類似的解決方案,但我無法修復它。

我希望我的問題很清楚。 先感謝您。

嘗試這個

    SELECT  plan.id, name ,  GROUP_CONCAT(cnt)  AS schedule_count
    FROM plan left join (select fk_plan, count(fk_store) as cnt from schedule 
                         GROUP BY fk_store)t
              ON t.fk_plan  = plan.id                                 
    GROUP BY plan.id  

FIDDLE的演示

  • 如果要顯示0而不是(null)則用此替換上面的GROUP_CONCAT

     GROUP_CONCAT(if(cnt is null , 0 , cnt)) 

使用連接: -

SELECT plan.id as id, name, GROUP_CONCAT(PlanCnt)
FROM plan
LEFT OUTER JOIN (SELECT fk_plan, COUNT(DISTINCT fk_store) AS PlanCnt FROM schedule GROUP BY fk_plan) Sub1
ON plan.id = Sub1.fk_plan
GROUP BY plan.id as id, plan.name

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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