【发布时间】:2020-01-10 08:57:28
【问题描述】:
我有两个 SQL 查询。一个人退还为游泳赛事支付给公司的所有款项 另一个获得所有座位付款(与第一个分开)。
第一个有一个虚拟表结构
carnivalId, buildingCode, TotalRaces, TotalIncome
第二个是
carnivalId, SeatCosts
我想将它们组合到一个表中,以便查询以以下格式返回
carnivalId, buildingCode, TotalRaces, TotalIncome, SeatCosts
我研究了 UNION,但它似乎不是正确的方法,因为这两个查询具有不同的返回结构。
我尝试在 carnivalId 上使用内部连接来连接两者,但它只是错误 -
SELECT c.carnivalId, c.buildingCode, COUNT(r.raceId) as TotalRaces, SUM(p.amountPaid) as TotalIncome
FROM Carnival c, Race r, Payment p, Entry e
WHERE r.carnivalId = c.carnivalId
AND e.raceId = r.raceId
AND p.payId = e.payId
INNER JOIN (SELECT c.carnivalId, SUM(s.seatsBought*st.seatCost)
FROM Carnival c, SeatsAvailable s, SeatType st
WHERE carnivalId = c.carnivalId
AND st.seatType = s.seatType
GROUP BY c.carnivalId, c.buildingCode) SeatingCosts ON c.carnivalId = SeatingCosts.carnivalId
GROUP BY c.carnivalId, c.buildingCode;
我也尝试将两个查询合并为一个,但它使所有返回的值完全错误(看起来它将第一个中的所有值乘以seatsBought结果中的行数
SELECT c.carnivalId, c.buildingCode, COUNT(r.raceId) as TotalRaces, SUM(p.amountPaid) as TotalIncome, SUM(s.seatsBought*st.seatCost) as SeatCosts
FROM Carnival c, Race r, Payment p, Entry e, SeatsAvailable s, SeatType st
WHERE r.carnivalId = c.carnivalId
AND e.raceId = r.raceId
AND p.payId = e.payId
AND s.carnivalId = c.carnivalId
AND st.seatType = s.seatType
GROUP BY c.carnivalId, c.buildingCode;
第一个查询 -
SELECT c.carnivalId, c.buildingCode, COUNT(r.raceId) as TotalRaces, SUM(p.amountPaid) as TotalIncome
FROM Carnival c, Race r, Payment p, Entry e
WHERE r.carnivalId = c.carnivalId
AND e.raceId = r.raceId
AND p.payId = e.payId
GROUP BY c.carnivalId, c.buildingCode;
第二次查询——
SELECT c.carnivalId, SUM(s.seatsBought*st.seatCost) as SeatCosts
FROM Carnival c, SeatsAvailable s, SeatType st
WHERE s.carnivalId = c.carnivalId
AND st.seatType = s.seatType
GROUP BY c.carnivalId, c.buildingCode;
【问题讨论】: