Sql 从不同的表中查找记录

Sql 从不同的表中查找记录,sql,oracle,oracle10g,Sql,Oracle,Oracle10g,要求 查找并显示实施的所有飞行员(员工ID和姓名) “通勤”型和“普通”型飞机上的航班 解决方案 SELECT flightI_new.eid, employee_new.ename FROM flightI_new INNER JOIN employee_new ON flightI_new.eid = employee_new.eid INNER JOIN plane_new ON flightI_new.pnum = plane_new.pnum WHERE plane_new.pt

要求

查找并显示实施的所有飞行员(员工ID和姓名) “通勤”型和“普通”型飞机上的航班

解决方案

SELECT flightI_new.eid, employee_new.ename
FROM flightI_new
INNER JOIN employee_new ON flightI_new.eid = employee_new.eid
INNER JOIN plane_new ON flightI_new.pnum = plane_new.pnum
WHERE plane_new.ptype = 'Commuter' AND plane_new.ptype = 'Normal';
该代码使用,但由于某些原因,我得到了“未返回行”


你知道怎么解决吗?

你的
不起作用,因为记录不能在同一条记录上同时包含
。但您应该能够使用以下内容:

SELECT flightI_new.eid, employee_new.ename
FROM flightI_new
INNER JOIN employee_new 
    ON flightI_new.eid = employee_new.eid
INNER JOIN plane_new 
    ON flightI_new.pnum = plane_new.pnum
WHERE plane_new.ptype IN ('Commuter', 'Normal')
GROUP BY flightI_new.eid, employee_new.ename
HAVING count(distinct plane_new.ptype) = 2;
SELECT distinct flightI_new."eid", employee_new."name"
FROM flightI_new
INNER JOIN employee_new 
    ON flightI_new."eid" = employee_new."eid"
INNER JOIN plane_new 
    ON flightI_new."pnum" = plane_new."pnum"
WHERE plane_new."ptype" = 'commuter'
  AND flightI_new."eid" IN (select flightI_new."eid"
                            FROM flightI_new
                            INNER JOIN employee_new 
                                ON flightI_new."eid" = employee_new."eid"
                            INNER JOIN plane_new 
                                ON flightI_new."pnum" = plane_new."pnum"
                            WHERE plane_new."ptype" = 'normal')

当然,您可以使用以下内容:

SELECT flightI_new.eid, employee_new.ename
FROM flightI_new
INNER JOIN employee_new 
    ON flightI_new.eid = employee_new.eid
INNER JOIN plane_new 
    ON flightI_new.pnum = plane_new.pnum
WHERE plane_new.ptype IN ('Commuter', 'Normal')
GROUP BY flightI_new.eid, employee_new.ename
HAVING count(distinct plane_new.ptype) = 2;
SELECT distinct flightI_new."eid", employee_new."name"
FROM flightI_new
INNER JOIN employee_new 
    ON flightI_new."eid" = employee_new."eid"
INNER JOIN plane_new 
    ON flightI_new."pnum" = plane_new."pnum"
WHERE plane_new."ptype" = 'commuter'
  AND flightI_new."eid" IN (select flightI_new."eid"
                            FROM flightI_new
                            INNER JOIN employee_new 
                                ON flightI_new."eid" = employee_new."eid"
                            INNER JOIN plane_new 
                                ON flightI_new."pnum" = plane_new."pnum"
                            WHERE plane_new."ptype" = 'normal')
请参见这里的错误

      WHERE plane_new.ptype = 'Commuter' AND plane_new.ptype = 'Normal';
plane_new.ptype在数据库中不能有两个东西,计算机和普通,它必须是其中之一,这就是为什么没有返回行的原因。 也许你是说别的。
在您的位置,您只能使用
。返回的行是那些拥有
计算机
正常

的人,您的
在这里不起作用,因为您只查看一行。在一行中加入“通勤者”和“普通人”是互斥的。好的一个:拥有count(distinct plane_new.ptype)=2;