簡體   English   中英

MYSQL選擇具有計數條件的查詢並加入

[英]MYSQL select query with count condition and join

我想知道以下查詢之間的區別。 兩者都返回相同的值。 我有關於INNER JOIN的想法,但是我不明白第一個查詢如何返回相同的值。

SELECT  *
FROM 
  `products`
WHERE
  (
    SELECT count(*) 
    FROM `categories`
    WHERE `products`.`category_id` = `categories`.`id` AND `slug` = 'aprons'
  ) >= 1 
  AND `slug` <> 'products-1'

SELECT products.* 
FROM 
  products
  INNER JOIN categories ON categories.id = products.category_id
WHERE 
  products.slug <> 'products-1'
  AND categories.slug = 'aprons'

第二個查詢效率更高。 並使用內部連接。 第一個用於子查詢。 子查詢對於驗證類別是否存在不是必需的。 顯示相同的結果,但是在優化時,第二次查詢效率更高。

在考慮第一個查詢時

(從categories WHERE products選擇count(*)。 category_id = categories id AND slug ='圍裙')> = 1

這部分是針對每個產品記錄執行的。 只需為產品表中的每個記錄迭代類別。

由於不需要連接表,因此第一個查詢將更加高效。 您可能沒有注意到執行時間有很大差異,但是如果表很大,您會注意到第一個查詢返回的速度更快。

內部聯接將基於兩個表中都具有值的行來組合兩個表。 換句話說,結果表中將沒有任何空值。

暫無
暫無

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

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