【问题标题】:Checking if mysql query provides the best solution to the question检查 mysql 查询是否为问题提供了最佳解决方案
【发布时间】:2019-11-21 23:57:25
【问题描述】:

列出所有工作的员工的姓名和地址 EmployeeType,其代码为 1,每小时工资为 40 欧元。

我想知道这是否是从上述问题中检索信息的最佳方式

SELECT e.EmployeeName , e.EmployeeAddress
FROM Employee e JOIN EmployeeType et ON e.EmployeeType = et.EmployeeType
HAVING e.EmployeeCode = (1) AND et.TotalPay = (40);

【问题讨论】:

  • 它没有,它有
  • Opps 错字,除了(已编辑)之外看起来还可以吗?
  • HAVING ... 是错误的:只在GROUP BY 之后使用HAVING。而是输入WHERE ...,就像@Zeljka 的回答一样。有很多方法可以编写这个查询;可能它们同样有效(如果您的 SQL 引擎很智能)。要求“最佳解决方案”需要价值判断:“最佳”的标准是什么?

标签: mysql relational-database


【解决方案1】:

我不会在此查询中使用“HAVING”,我更喜欢 WHERE 条件或在连接时添加更多参数。您可以在此LINK 上阅读有关 HAVING 的信息 与 WHERE 条件略有不同,因为它是在查询结果后应用的。

第一个具有简单 WHERE 条件的解决方案

SELECT e.EmployeeName , e.EmployeeAddress
FROM Employee e 
INNER JOIN EmployeeType et ON e.EmployeeType = et.EmployeeType
WHERE e.EmployeeCode = '1' AND et.TotalPay = '40';

第二个解决方案在加入时添加更多参数

SELECT e.EmployeeName , e.EmployeeAddress
FROM Employee e 
INNER JOIN EmployeeType et ON (e.EmployeeType = et.EmployeeType AND et.TotalPay = '40')
WHERE e.EmployeeCode = '1' ;

【讨论】:

  • 第一个解决方案的JOINON 同名列。所以你可以使用NATURAL JOIN。但是,如果两个表之间还有其他同名列,则可能会出错。 @Liam 的 q 应该说明表的完整架构。
猜你喜欢
  • 2016-11-08
  • 2013-02-24
  • 2022-08-18
  • 2013-03-22
  • 2022-12-19
  • 1970-01-01
  • 1970-01-01
  • 2012-08-16
  • 2020-04-12
相关资源
最近更新 更多