SQL从联合表的一张表中选择所有

Mar*_*lka 4 sql oracle select

我是一个 SQL 初学者,我需要弄清楚这个查询:我有三个连接在一起的表,我从中计算某些值,如下所示:

SELECT SEATS_MAX-COUNT(BOOKING_ID) 
FROM FLIGHTS 
  INNER JOIN PLANES ON FLIGHTS.PLANE_ID=PLANES.PLANE_ID 
  LEFT JOIN BOOKINGS ON FLIGHTS.FLIGHT_ID=BOOKINGS.FLIGHT_ID 
GROUP BY SEATS_MAX;
Run Code Online (Sandbox Code Playgroud)

这将返回航班中的空闲座位数。但我想获取 FLIGHTS 中的所有列(如SELECT * FROM FLIGHTS;)加上计数。即类似的东西

SELECT FLIGHTS.*, SEATS_MAX-COUNT(BOOKING_ID) 
FROM FLIGHTS 
  INNER JOIN PLANES ON FLIGHTS.PLANE_ID=PLANES.PLANE_ID 
  LEFT JOIN BOOKINGS ON FLIGHTS.FLIGHT_ID=BOOKINGS.FLIGHT_ID 
GROUP BY SEATS_MAX;
Run Code Online (Sandbox Code Playgroud)

但这不起作用(无效的 user.table.column、table.column 或列规范)。有办法实现这一点吗?我正在使用 Oracle 数据库。

谢谢

muc*_*cio 5

在分组依据中,您需要不聚合所有列。

所以你的查询必须变成:

      SELECT FLIGHTS.*, 
             SEATS_MAX-COUNT(BOOKING_ID) 
        FROM FLIGHTS 
  INNER JOIN PLANES 
          ON FLIGHTS.PLANE_ID = PLANES.PLANE_ID 
   LEFT JOIN BOOKINGS 
          ON FLIGHTS.FLIGHT_ID = BOOKINGS.FLIGHT_ID 
    GROUP BY FLIGHTS.Column1,
             ...
             FLIGHTS.ColumN,
             SEATS_MAX;
Run Code Online (Sandbox Code Playgroud)

编辑: 要列出表的所有列,您可以使用以下查询

  SELECT 'FLIGHTS.' || column_name
    FROM user_tab_columns
   WHERE table_name = 'FLIGHTS'
ORDER BY column_id;
Run Code Online (Sandbox Code Playgroud)

这应该会让你的生活更轻松一些,然后复制并粘贴