在这里加入 MySQL 是最佳选择吗?

标签 mysql sql

事件:

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/

相关文章:

MySQL 查询返回重复结果

mysql - 怎样才能知道好友的名字呢?

php - mysql在单个表的where条件下的多行值

javascript - 使用Php、json、JS和JSON获取json数组创建产品索引问题

mysql - Dockerfile - 在入口点部署 mysql 转储

c# - 使用 Distinct 将 SQL 查询转换为 Linq (c#)

mysql - 在产品数据库中,如何计算两个时期的价格变化,并按类别分组

php - 购买元素的数据库关系

mysqldump Windows 未知选项 '--no beep'

mysql - SQL 事件的语法问题