2013-02-26 20 views
2

的专栏中,我不能完全得到我周围的SQL查询的头,因为它不是我的专长。我试图选择雇员表中id的行的名称出现在另一个表accounts的列salesPersonId中。也就是说,在帐户表中表示的任何员工姓名。选择行标识的出现在另一个表

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

试试这个:

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

JOIN将采取过滤的照顾,以确保您只返回存在两个表中的记录。

Distinct将确保你每firstName值一次只得到。您还可以通过分组通过完成这个employee.Idemployee.firstName(凭身份证分组是更​​好的策略,如果你想返回一行对每个唯一的员工,即使他们有相同的名字,其上进行分组firstName或使用distinct是当你只是希望每一个独特的名字之一,即使该名称是由一个以上的员工使用)

+0

哇,太棒了。非常感谢!如果我有不止一个凯特,我仍然不太了解如何组队。 – 1252748 2013-02-26 20:34:48

+2

如果您有多个凯特,并且您只想为每个唯一名称显示一行,那么'Group By e.firstName '。如果您想为每位唯一员工显示一行,即使员工拥有相同的姓名,也可以使用“Group By e.Id”。 – 2013-02-26 20:36:08

+0

'SELECT不同e.firstName FROM员工e JOIN帐户a ON a.salesPersonID1 = e.id Group By e.Id'给我错误:'错误:列'employee.FirstName'在选择列表中无效 因为它不是在聚合函数 或GROUP BY clause.'包含:/ – 1252748 2013-02-26 20:50:21

0

u能有这样的查询....

从EMPLOYEES1 E选择e.firstname左连接帐户on(e.id = a.salespersonid) 其中e.id = a.salespersonid group by e.firstname

结果:

姓 法案 凯特

相关问题