2

我无法完全理解 SQL 查询,因为它不是我的强项。我正在尝试选择员工表中的行的名称,id其中的 's 出现在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. 谢谢你。

4

2 回答 2

4

尝试这个:

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

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

Distinct将确保您只获得每个firstName值一次。您也可以通过 Grouping by employee.Idor来完成此employee.firstName操作(如果您想为每个唯一员工返回一行,即使他们有相同的名字,按 Id 分组是更好的策略,分组firstName或使用distinct是当您只想要一个时每个唯一的名称,即使该名称由多个员工使用)

于 2013-02-26T20:28:21.023 回答
0

你可以有这样的查询....

select e.firstname from employees1 e left join account a on(e.id=a.salespersonid) where e.id= a.salespersonid group by e.firstname

结果:

名字比尔凯特

于 2013-02-27T10:10:16.237 回答