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)
只需将多个子选择打包到一个语句中!
你有两个计算行的查询,所以它们应该写成两个查询,每个查询都带有 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)