將兩條SQL語句合併爲一條的最佳方式是什麼?合併兩條SQL語句
SELECT MIN(capacity) AS mincapacity, MAX(capacity) AS maxcapacity
FROM room
SELECT MIN(grade) AS mingrade, MAX(grade) AS maxgrade
FROM room_grade
在此先感謝!
將兩條SQL語句合併爲一條的最佳方式是什麼?合併兩條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) 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)
我不會這樣做。連接會增加不必要的開銷,並且會比兩個單獨的查詢表現得更差。另外,如果記錄存在於一個平臺但不存在,則可以改變結果。 – MatBailie 2012-03-22 16:10:25
無論是
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
OR
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_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
連接將引入大量開銷。另外,如果記錄存在於一張表格中,但不存在,則可以改變結果。 – MatBailie 2012-03-22 16:08:59
鑑於這兩個結果集包含每個只有一排,最簡單的方法將是一個交叉聯接:
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
+1:打我也是這樣:) – MatBailie 2012-03-22 16:09:34
您期望返回哪個結果集模式? – sll 2012-03-22 16:00:09
這兩張桌子之間是否有共同的鑰匙? – Taryn 2012-03-22 16:00:18
你爲什麼要將這些陳述合併爲一個?乍一看,它看起來像個壞主意...... – 2012-03-22 16:01:07