[英]MySQL using select with 2 queries, subquery or join?
與我的上一個問題( MySQLi性能,多個(單獨)查詢與子查詢 )相關,我遇到了另一個問題。
有時我使用子查詢從另一個表中選擇值(例如,連接到ID的用戶名),但我不確定select-in-select,因為它看起來不是很干凈我不確定性能。
子查詢可能如下所示:
SELECT
(SELECT `user_name` FROM `users`
WHERE `user_id` = table2.user_id) AS `user_name`
, `value1`
, `value2`
FROM
`table2`
....
對table1的結果使用單獨的查詢而對table2使用另一個查詢是否“更好”(連接加倍,但不需要交叉表),或者我是否應該使用JOIN在單個查詢中獲取結果?
我對JOINS和子查詢沒有多少經驗,所以我不確定在這種情況下JOIN是否會“太多”,因為我真的只需要一個名稱連接到一個ID(或者可能需要計算一個ID)來自表的行),或者如果沒關系,因為select-in-select也被視為某種JOIN ...
JOIN的解決方案可能如下所示:
SELECT
users.user_name , table2.value1, table2.value2
FROM
`table2`
INNER JOIN
`users`
ON
users.user_id = table2.user_id
....
如果我更喜歡JOIN,在這種情況下哪一個最好:左連接,內連接或其他什么?
您詢問是否使用inner join
或left join
這一事實確實表明您沒有對它們做過多少工作。
這兩者的目的完全不同, inner join
用於從兩個或多個表中返回列,其中某些列具有匹配值。 left join
,當你想從表中的行指定左聯接子句中返回,即使有其他表中沒有匹配柱。 這取決於您的應用程序。 如果一個表有玩家的名字,而另一個表包含他們支付的罰款的詳細信息,那么你肯定會想要使用left join
,來為沒有罰款的玩家負責,因此在第二個表中沒有記錄。
關於是使用子查詢還是join
,正確使用時, join
s可以更快。 正確地說,當連接列上有索引時,表按照包含行數的遞增順序指定(通常可能有例外),連接列具有相似的數據類型等。如果所有這些條件匹配, join
將是更好的選擇。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.