哪個版本的查詢更快/最佳實踐?(好奇的東西)Inner Join與Union全部
更重要的是,它們是否相等?
在這個例子中,這些查詢是否完成相同的事情?
1)INNER JOIN具有兩個或條件:
SELECT
DISTINCT (cat.id) as 'Cat ID:'
FROM
cat
INNER JOIN cuteness_showdown ON
(cat.id = cuteness_showdown.cat_1 OR cat.id = cuteness_showdown.cat_2);
2)查詢分開的每一列和UNION ALL:
SELECT
DISTINCT (table_1.id) as 'Cat ID:'
FROM
(SELECT
cuteness_showdown.cat_1 AS id
FROM
cuteness_showdown
UNION ALL
SELECT
cuteness_showdown.cat_2 AS id
FROM
cuteness_showdown) AS table_1;
現在,哪個版本是更快/最好的做法,如果我需要從另一個表中的列?
1)INNER JOIN具有兩個或條件(無變化):
SELECT
DISTINCT (cat.id) as 'Cat ID:',
cat.name as 'Cat Name:'
FROM
cat
INNER JOIN cuteness_showdown ON
(cat.id = cuteness_showdown.cat_1 OR cat.id = cuteness_showdown.cat_2);
2)查詢每個列分別和UNION ALL(需要INNER JOIN貓表):
SELECT
DISTINCT (table_1.id) as 'Cat ID:'
cat.name as 'Cat Name:'
FROM
(SELECT
cuteness_showdown.cat_1 AS id
FROM
cuteness_showdown
UNION ALL
SELECT
cuteness_showdown.cat_2 AS id
FROM
cuteness_showdown) AS table_1
INNER JOIN cat on
(table_1.id = cat.id);
它們是否等同?不,他們做了兩件完全不同的事情。 JOIN根據公共值將兩個錶鏈接在一起,UNION將兩個(可能無關的)結果集組合成一個結果集。 – 2012-02-20 19:19:17
我知道,但我的意思是,他們是否完成了完全相同的事情*在這個例子*? – JohnB 2012-02-20 19:21:50
只是一個側面提示:在你的示例查詢中,括號內的列跟隨着'DISTINCT'似乎表明在這些情況下'DISTINCT',在你看來,正被應用到這些特定的列。不是這樣的:'DISTINCT'總是應用於整個返回的行。括號內的列不超過括號內的列。也就是說,如果您只是將列放在括號內,並且不會誤導您,也不會誤導您的開發人員/數據庫管理員,那很好。只是以爲我會告訴你,如果你有'DISTINCT'功能的誤解。 – 2012-02-20 21:12:41