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