我试图进行一个查询,将一个在同一个地方工作的工人配对。我问的关系模型看起来像这样:
员工( 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上很新,所以我无法想到这样做的方法。任何帮助或输入都会有所帮助。
由于
答案 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
表表示。如果你想在这个基础上配对员工,那么你应该以字段编号相同的方式进行连接,而不是以员工编号相同为条件的连接。
您的主要加入似乎是Work
到Work
个匹配FiNum
的记录的自我加入。要在结果中获取员工姓名,您还需要加入Employee
两次。为避免员工与自己配对,您需要通过WHERE
条款过滤这些案例。