簡體   English   中英

結合兩個SQL語句

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM