选择其ID显示在另一个表的列中的行

时间:2013-02-26 20:25:14

标签: sql sql-server

我无法理解SQL查询,因为它不是我的强项。我正在尝试在员工表中选择行的名称,id的行显示在另一个表salesPersonId的列accounts中。也就是说,在帐户表中表示的任何员工姓名。

ACCOUNT
+----+---------------+
| id | salesPersonID |
+----+---------------+
|  0 |     1020      |
+----+---------------+
|  1 |     1020      |
+----+---------------+
|  2 |     1009      |
+----+---------------+


EMPLOYEE
+------+---------------+
|  id  |   firstName   |
+------+---------------+
| 1009 |     BILL      | <-select his name
+------+---------------+
| 1020 |     KATE      | <-select her name
+------+---------------+
| 1025 |     NEIL      | <-not this guy
+------+---------------+

由于Neil在account.salesPersonID中没有任何存在,我想选择除他之外的其他两个。不过,我并没有走得太远,并寻找一些意见。

SELECT * FROM employee e
LEFT JOIN account a
ON a.salesPersonID = e.id
WHERE (SELECT COUNT(salesPersonID) FROM account) > 0

不起作用。我想知道如何选择salesPersonID中存在的这些员工姓名。谢谢。

2 个答案:

答案 0 :(得分:4)

试试这个:

SELECT Distinct e.firstName 
FROM employee e
JOIN account a ON a.salesPersonID = e.id

JOIN将负责过滤,以确保您只返回两个表中存在的记录。

Distinct将确保您只获得每次firstName值。您还可以通过employee.Idemployee.firstName进行分组来实现此目的(如果您希望为每个唯一员工返回一行,则按ID分组是更好的策略,即使他们具有相同的名字,也可以分组firstName或使用distinct用于您只需要每个唯一名称中的一个,即使该名称由多个员工使用)

答案 1 :(得分:0)

你可以像这样查询....

从employees1 e中选择e.firstname e左边的加入帐户a(e.id = a.salespersonid) 其中e.id = a.salespersonid e.firstname小组

结果:

姓名 法案 凯特