【问题标题】:Showing an Employee Profile in MySQL在 MySQL 中显示员工资料
【发布时间】:2021-11-29 10:23:57
【问题描述】:

查询:

SELECT DISTINCT Employee_Name, Employee_Type, Email, Birth_Date, 
        Previous_Education, Project_Name, Skill_Title
FROM Employee_T, Project_T, Skill_T, Skill_Overview_T
WHERE Employee_T.Employee_ID = Skill_T.Employee_ID 
AND Skill_T.Skill_Code = Skill_Overview_T.Skill_Code 
AND Employee_Name = 'xyz';

我正在尝试在 SQL 中显示员工资料。该员工从事许多项目并具有两项技能,这就是为什么我会为员工信息(例如姓名、电子邮件地址等)获得大量冗余行。 我只想显示每个信息一次。我该如何调整我的 SQL 查询?

【问题讨论】:

  • 我们可能需要查看一些具体的示例数据才能回答。请注意,DISTINCT 只会在 all 列值相同时过滤掉行。

标签: mysql sql querying


【解决方案1】:

首先使用显式连接语法。带逗号的旧版本已弃用近 30 年!

当你这样做时,你会发现你错过了项目表的连接条件:

SELECT e.Employee_Name, e.Employee_Type, Email, e.Birth_Date, e.Previous_Education, 
       p.Project_Name, s.Skill_Title
FROM Employee_T e
JOIN Project_T p ON ?????
JOIN Skill_T s ON e.Employee_ID = s.Employee_ID
JOIN Skill_Overview_T o ON s.Skill_Code = o.Skill_Code
WHERE e.Employee_Name = 'xyz';

我的猜测是你根本不需要加入Skill_Overview_T 表。

【讨论】:

  • 它仍然不起作用,因为它给了我错误代码“不是唯一的表/别名:project_T”
  • @JuliaBrost 错误的意思是:Your query contains columns which could be present with the same name in more than one table you are referencing.
  • @JuliaBrost:您需要在您选择的列之前添加一个表名。这样数据库就知道你指的是哪个表。如果 2 个表包含像 name 这样的列,那么您需要一个表来识别正确的表,如下所示:select tablename.name。如果你为表使用别名,那么你需要使用它们并且不能像这样混合:select table.name, t.id from table t
猜你喜欢
  • 2021-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多