【问题标题】:MySQL select query from two tablesMySQL 从两个表中选择查询
【发布时间】:2014-08-14 08:57:10
【问题描述】:

我有两个表:usersworks

我需要编写 select 查询,以便 从 users 表中计算不同的名称,其中 work_status = 1 from works 表

总数是:3个约翰,1个汤姆

我需要得到结果:
John 2(2 因为一个 John work_status = 0 ant 这不算数
汤姆 1

我写了可以计算不同名字的select,只需要比较work_status..

SELECT name,COUNT(*) as num FROM users GROUP BY name

我的查询返回:

【问题讨论】:

  • 这个例子是完全错误的。根据该关系,每个用户只有 1 个作品。注意works表中的user_id
  • @Hanky웃Panky 你是对的。我重写了我的答案。我认为公司有三个不同的约翰。
  • 这只是数据示例,我的真实表不是这个(但我需要那个查询)
  • 但是您的示例不正确,我们的答案也可能不正确。他们是三个不同的约翰,还是他们都是同一个人?
  • @JCalcines,示例数据很清楚,尽管选择不当。我相信你已经被概念迷住了。如果您将名称想象为类别,请说性别(John=Male,Tom=Female);然后可以将查询视为获取每个性别状态为 1 的作品的数量。

标签: mysql


【解决方案1】:

你的问题有问题。所以这里有两个解决方案。

如果公司有 3 个不同的 John,这是您的查询

SELECT u.name, COUNT(*) as num 
FROM users u INNER JOIN works w ON w.user_id = u.id 
WHERE w.work_status = 1
GROUP BY u.name, u.id

如果公司只有一个 John 在工作,您的查询是这个:

SELECT u.name, COUNT(*) as num 
FROM users u INNER JOIN works w ON w.user_id = u.id 
WHERE w.work_status = 1
GROUP BY u.name

注意:如果三个 John 是同一个人,你应该删除最后的 2 个并将 works 表上的 user_id = 3user_id = 4 更改为 user_id = 1

【讨论】:

    【解决方案2】:

    这是一个简单的 JOIN 查询:

      SELECT u.name, COUNT(*) num
        FROM users u
        JOIN works w
          ON w.user_id = u.id
         AND w.work_status = 1
    GROUP BY u.name
    

    【讨论】:

      【解决方案3】:

      这个应该做的工作:

      SELECT users.name,SUM(works.work_status) as num 
        FROM users,works 
        WHERE users.id=works.id 
        GROUP BY name
      

      【讨论】:

        【解决方案4】:
        SELECT 
          users.`name`,
          COUNT(*) num 
        FROM
          users,
          works 
        WHERE users.`id` = works.`user_id` 
          AND works.`work_status` = 1 
        GROUP BY users.`name` ;
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-02-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-07-16
          • 1970-01-01
          相关资源
          最近更新 更多