显示另一个表中具有相同值的对

时间:2015-10-16 15:24:10

标签: sql

我试图进行一个查询,将一个在同一个地方工作的工人配对。我问的关系模型看起来像这样:

员工( EmNum ,姓名)
工作( FiNum *,EmNum *
字段( FiNum ,标题)
(粗体表示主键)

现在我的代码看起来像

SELECT work.finum, e1.name,e1.emnum,e2.name,e2.emnum
FROM employee e1
INNER JOIN employee e2
  on e1.EmNum = e2.EmNum 
INNER JOIN work
  on e1.emnum = work.emnum

这给我的结果如

| finum | name | emnum | name_1 | emnum_1 | 
|   1   |   a  |   1   |    a   |    1    | 
|   1   |   b  |   2   |    b   |    2    | 
|   2   |   c  |   3   |    c   |    3    | 
|   3   |   d  |   4   |    d   |    4    | 
|   3   |   e  |   5   |    e   |    5    | 

虽然我希望结果像

| finum | name | emnum | name_1 | emnum_1 | 
|   1   |   a  |   1   |    b   |    2    | 
|   1   |   b  |   2   |    a   |    1    | 
|   3   |   d  |   4   |    e   |    4    | 
|   3   |   e  |   5   |    d   |    5    | 

我在sql上很新,所以我无法想到这样做的方法。任何帮助或输入都会有所帮助。

由于

2 个答案:

答案 0 :(得分:0)

你的问题有点不清楚,但我的猜测是你试图找到在同一个地方工作的员工=同样的工作,但不同的行。你可以这样做:

SELECT w1.finum, e1.name,e1.emnum, e2.name,e2.emnum
from work w1
join work w2 on w1.finum = w2.finum and w1.emnum != w2.emnum
join employee e1 on e1.emnum = w1.emnum
join employee e2 on e2.emnum = w2.emnum

如果您不想重复记录(1< - > 2 + 2< - > 1,请将联接中的!=更改为>或<)

答案 1 :(得分:0)

  

我试图进行一个查询,将一个在同一个地方工作的工作人员配对。

据推测,"地点"由Field表表示。如果你想在这个基础上配对员工,那么你应该以字段编号相同的方式进行连接,而不是以员工编号相同为条件的连接。

您的主要加入似乎是WorkWork个匹配FiNum的记录的自我加入。要在结果中获取员工姓名,您还需要加入Employee两次。为避免员工与自己配对,您需要通过WHERE条款过滤这些案例。