[英]Combining two SQL statements
将两个SQL语句合并为一个的最佳方法是什么?
SELECT MIN(capacity) AS mincapacity, MAX(capacity) AS maxcapacity
FROM room
SELECT MIN(grade) AS mingrade, MAX(grade) AS maxgrade
FROM room_grade
提前致谢!
假设两个结果集每个只包含一行,最简单的方法是交叉连接:
select * from
(SELECT MIN(capacity) AS mincapacity, MAX(capacity) AS maxcapacity FROM room) r
cross join
(SELECT MIN(grade) AS mingrade, MAX(grade) AS maxgrade FROM room_grade) g
SELECT
*
FROM
(SELECT MIN(capacity) AS mincapacity, MAX(capacity) AS maxcapacity FROM room) AS room
CROSS JOIN
(SELECT MIN(grade) AS mingrade, MAX(grade) AS maxgrade FROM room_grade) AS room_grade
这里的主要好处是将所有记录放在一行上,而不是加入每个表的组件记录。
在聚合之前涉及联接的答案将引入显着的开销,这将对性能产生巨大影响。
SELECT 'CAPACITY', MIN(capacity) AS min, MAX(capacity) AS max
FROM room
UNION
SELECT 'GRADE', MIN(grade) AS min, MAX(grade) AS max
FROM room_grade
应该做的工作。
你可以用可怕的JOIN
语法做到这一点:
SELECT MIN(capacity) AS mincapacity, MAX(capacity) AS maxcapacity, MIN(grade) AS mingrade, MAX(grade) AS maxgrade
FROM room, room_grade;
但是你应该使用正确的JOIN
语法
SELECT MIN(r.capacity) AS mincapacity, MAX(r.capacity) AS maxcapacity
, MIN(rg.grade) AS mingrade, MAX(rg.grade) AS maxgrade
FROM room r
JOIN room_grade rg
ON r.key = rg.key; (whatever the key is that joins the two tables)
无论是
SELECT MIN(capacity) AS mincapacity, MAX(capacity) AS maxcapacity FROM room
UNION ALL
SELECT MIN(grade) AS mingrade, MAX(grade) AS maxgrade FROM room_grade
要么
SELECT MIN(r.capacity) AS mincapacity, MAX(r.capacity) AS maxcapacity,
MIN(rg.grade) AS mingrade, MAX(rg.grade) AS maxgrade
FROM room r
INNER JOIN room_grade rg ON r.Id = rg.room_id
您可能想要加入ID字段。 我假设'room'表有一个唯一的key字段,room_grade可以有相同的字段。 加入两个这样的东西吧。
SELECT MIN(r.capacity) AS mincapacity, MAX(r.capacity) AS maxcapacity, MIN(g.grade) AS mingrade, MAX(g.grade) AS maxgrade
FROM room r
inner join room_grade g
on room r.roomId = g.roomId
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.