簡體   English   中英

MySQL使用帶有2個查詢,子查詢或連接的select?

[英]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 joinleft join這一事實確實表明您沒有對它們做過多少工作。

這兩者的目的完全不同, inner join用於從兩個或多個表中返回列,其中某些列具有匹配值。 left join ,當你想從表中的行指定左聯接子句中返回,即使有其他表中沒有匹配柱。 這取決於您的應用程序。 如果一個表有玩家的名字,而另一個表包含他們支付的罰款的詳細信息,那么你肯定會想要使用left join ,來為沒有罰款的玩家負責,因此在第二個表中沒有記錄。

關於是使用子查詢還是join ,正確使用時, join s可以更快。 正確地說,當連接列上有索引時,表按照包含行數的遞增順序指定(通常可能有例外),連接列具有相似的數據類型等。如果所有這些條件匹配, join將是更好的選擇。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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