[英]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
如果要顯示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.