事件:
id name cap
1 Campaign1 2
2 Campaign2 1
3 Campaign3 1
服务:
id id_campaign ip
1 1 127.0.0.1
2 1 127.0.0.1
3 2 127.0.0.1
查询结果应显示:
campaigns_id campaigns_name cap count
1 Campaign1 2 2
2 Campaign2 1 1
3 Campaign3 1 0
我正在使用这个查询:
SELECT served.id_campaign,
campaigns.name,
campaigns.cap,
COUNT( served.id ) AS count
FROM campaigns
LEFT JOIN served ON campaigns.id = served.id_campaign
WHERE served.ip = '127.0.0.1'
GROUP BY served.id_campaign
我的查询显示了这些结果(不好,没有显示 campaigns_id.3):
campaigns_id campaigns_name cap count
1 Campaign1 2 2
2 Campaign2 1 1
如果我想包含未被“WHERE”语句选择的值,我认为我的做法是错误的,因为“served”中没有与 campaigns.id='3' 的 WHERE 语句匹配的记录
最佳答案
新编辑:
SELECT campaigns.id as id_campaign,
campaigns.name,
campaigns.cap,
COUNT( served.id ) AS count
FROM campaigns
LEFT JOIN served ON campaigns.id = served.id_campaign
AND served.ip = '127.0.0.1'
GROUP BY campaigns.id
旧帖:
我想出了这个查询,它产生了你想要的结果:
(SELECT served.id_campaign,
campaigns.name,
campaigns.cap,
COUNT( served.id ) AS count
FROM campaigns
LEFT JOIN served ON campaigns.id = served.id_campaign
WHERE served.ip = '127.0.0.1'
GROUP BY served.id_campaign)
UNION
(SELECT id, name, cap, 0 as count
FROM campaigns
WHERE id <> ALL
(
SELECT campaigns.id
FROM campaigns, served
WHERE campaigns.id = served.id_campaign AND served.ip = "127.0.0.1"
)
)
关于在这里加入 MySQL 是最佳选择吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6012765/