在数据库的多个列上查询不同

时间:2014-01-21 20:04:01

标签: c# sql

我正在使用C#和Access数据库构建一个应用程序,其中有一个员工及其老板的列表。我看起来有点像这样:

[Employee name] [Boss #1 name] [Boss #2 name]
     John           Jake         Margaret
     Jane           Jake         Tony    
     Bob            Mike         Tony
     Marty          Mike         Margaret

是否可以查询数据库以显示没有重复的每个名称,如下所示。

John
Jane
Bob
Marty
Jake
Mike
Margaret
Tony

非常感谢!

2 个答案:

答案 0 :(得分:1)

您应该真正考虑更改DB Schema。看起来你没有使用适当的关系技术。

无论如何......一个解决方案就是联合每一列并选择不同的。

SELECT DISTINCT n 
FROM   (SELECT employee_name AS n 
        FROM   table_1 
        UNION 
        SELECT boss_1_name AS n 
        FROM   table_1 
        UNION 
        SELECT boss_2_name AS n 
        FROM   table_1) names;

这是一个现在可以使用的快速解决方案,但从长远来看,您应该真正考虑更改架构。

答案 1 :(得分:0)

如果您只是尝试针对某些现有的Access数据库运行查询,那么您可以:

对此的SQL查询将是(请记住,UNION已经做了明确的分析):

SELECT [Employee Name] FROM [tablename]
UNION
SELECT [Boss #1 Name] FROM [tablename]
UNION
SELECT [Boss #2 Name] FROM [tablename]

我认为您可以在名为SQL视图的查询创建器的选项卡中在Access中运行SQL。您还可以检查如何在Access中执行UNION,因为这是您要使用的。

如果您打算将其作为一个持久的东西,那么您可以做的是创建两个表:

[Employee]
  -ID (primary key identity)
  -Name

[EmployeeSupervisor]
  -EmployeeId (foreign key to Employee.ID) (part of PK)
  -SupervisorId (foreign key to Employee.ID) (part of PK)

或者如果每个员工都有两个老板,那么你可以这样做:

[Employee]
  -ID (primary key identity)
  -Name

[EmployeeSupervisor]
  -EmployeeId (foreign key to Employee.ID) (PK)
  -Supervisor1Id (foreign key to Employee.ID)
  -Supervisor2Id (foreign key to Empoyee.ID)