从第二个查询 SQL 添加列

kir*_*rie 2 sql oracle union join

我正在尝试将我的两个查询的结果连接到同一个结果表中,但我不确定如何执行此操作。我尝试使用 UNION 和 JOIN 运算符,但无法弄清楚。这是我想要连接的两个查询的 SQL。两个单独的查询都得到了他们应该得到的结果。提前致谢!

SELECT s.Store_Num || ': ' || s.Store_Name AS "Store",
        COUNT(e.Store_Num) AS "Total Rented"
FROM Employee e JOIN store s ON e.Store_Num = s.Store_Num
        JOIN rental r ON e.Emp_ID = r.Emp_ID
        JOIN rented_item ri ON r.Rental_Num = ri.Rental_Num
WHERE(SYSDATE - Rent_Date) < 60
GROUP BY s.Store_Num, s.Store_Name;
UNION
SELECT COUNT(i.Store_Num) AS "Total Inventory"
FROM inventory i JOIN store s ON i.Store_Num = s.Store_Num
GROUP BY s.Store_Num, s.Store_Name;
Run Code Online (Sandbox Code Playgroud)

Fal*_*lco 5

只需将多个子选择打包到一个语句中!

你有两个计算行的查询,所以它们应该写成两个查询,每个查询都带有 COUNT(*) 因为你计算行,或者你应该使用 COUNT(item_num) 因为你计算项目而不是存储,这会更清楚为读者。

然后,您只需选择所有商店,并为每个商店在子查询中进行两次计数 - 这很容易维护,并且优化器应该获得正确的连接谓词。

SELECT s.Store_Num || ': ' || s.Store_Name "Store",
       ( SELECT COUNT(*)
           FROM Employee e
           JOIN rental r ON e.Emp_ID = r.Emp_ID
           JOIN rented_item ri ON r.Rental_Num = ri.Rental_Num
          WHERE e.Store_Num = s.Store_Num
            AND (SYSDATE - Rent_Date) < 60
       ) "Total Rented",
       ( SELECT COUNT(*)
           FROM inventory i WHERE i.Store_Num = s.Store_Num
       ) "Total Inventory"
  FROM store s
;
Run Code Online (Sandbox Code Playgroud)