【问题标题】:i have an error which i dont understand. can you help me? [closed]我有一个我不明白的错误。你能帮助我吗? [关闭]
【发布时间】:2014-04-18 14:04:16
【问题描述】:

我在“reportsTo”中的内容与employeeNumber 相似,所以问题是什么?

SELECT firstName,lastName,temp.count
FROM employees
where employeeNumber  in(

SELECT reportsTo, COUNT( * ) AS count
FROM employees
GROUP BY reportsTo
) as temp

【问题讨论】:

  • 你告诉我们。您遇到了什么错误?
  • EmployeeNumber 不能IN两个不同的两个不同的列,或者在你的情况下是一个列和一个计算值。
  • 请将您的问题标题edit 改为描述您实际问题的内容。 “我有一个我不明白的错误。你能帮我吗?”对于在尝试解决他们的问题时在搜索结果中找到它的未来读者来说完全没用,并且它没有提供有关您在此处提出的问题的任何信息。
  • #1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 8 行的“as temp LIMIT 0, 30”附近使用正确的语法

标签: mysql sql phpmyadmin


【解决方案1】:

用于 IN 子句的子查询不能返回多个列,因此您不能在其中包含 SELECT reportsTo, COUNT( * ) AS count。您可能想加入子查询,如下所示:

SELECT firstName,lastName,temp.count
FROM employees
INNER JOIN (
    SELECT reportsTo, COUNT( * ) AS count
    FROM employees
    GROUP BY reportsTo
) temp ON employees.employeeNumber = temp.reportsTo

免责声明:我不使用 MySQL,因此上述语法可能不准确。

您可能还会在尝试使用 count 作为列名时遇到问题。重命名或转义(SQL Server 使用 [],不确定 MySQL)。

【讨论】:

  • 谢谢你!但我的意思是,类似于加入所以请解释我的区别,因为我不明白......
【解决方案2】:

真的不知道你想要什么,但只是将其更改为:

SELECT firstName,
       lastName
  FROM employees 
 WHERE employeeNumber  in( SELECT reportsTo 
                             FROM employees 
                         GROUP BY reportsTo )

删除计数和别名会起作用,但我觉得你真正想要的是:

SELECT manager.firstName,
       manager.lastName,
       temp.count        AS number_of_directs
  FROM (SELECT reportsTo, 
               COUNT( * ) AS count
          FROM employees
      GROUP BY reportsTo) as temp
INNER JOIN employees AS manager ON manager.reportsTo = temp.reportsTo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-24
    • 2017-04-08
    • 2019-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多