(Oracle SQL)连接和行对的问题

时间:2014-11-27 09:24:53

标签: sql oracle join

我有3张桌子

CREATE TABLE airships(
    idas number PRIMARY KEY,
    nameas varchar2(20),
    range number
                     );

CREATE TABLE Certificate(
      idem number NOT NULL,
      idas number NOT NULL,
      FOREIGN KEY (idem) REFERENCES employees(idem),
      FOREIGN KEY (idas) REFERENCES airships(idas)
                        );


CREATE TABLE employees(
      idem number PRIMARY KEY,
      nameem varchar2(20),
      paycheck number
                    );

我必须找到一批经过相同飞艇认证的员工,范围超过3000。

我知道我必须使用JOIN,但我不知道如何从同一个表中找到对。

1 个答案:

答案 0 :(得分:0)

SELECT e1.nameem, e2.nameem, a.nameas
FROM employees e1
JOIN Certificates c1 ON e1.idem = c1.idem
JOIN Certificates c2 ON c1.idas = c2.idas AND c1.idem < c2.idem
JOIN employees e2 ON e2.idem = c2.idem
JOIN airships a ON a.idas = c1.idas
WHERE a.range > 3000

c1.idem < c2.idem测试使其不会将员工作为一对自己报告,并且也避免两次显示相同的一对(以相反的顺序)。