爲catalog_product_category_bindings
表結構:MySQL - 左連接或嵌套選擇用於過濾不存在的行?
`productID` INTEGER UNSIGNED NOT NULL
`categoryID` INTEGER UNSIGNED NOT NULL
表結構catalog_products
:
`id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT
misc unrelated columns
任務:獲取的未綁定到任何類別(在catalog_product_category_bindings
沒有進入)所有的產品數據。
查詢#1(使用LEFT JOIN):
SELECT cp.* FROM catalog_products AS cp
LEFT JOIN catalog_product_category_bindings AS cpcb
ON cp.id = cpcb.productID
WHERE cpcb.categoryID IS NULL
查詢#2(使用嵌套選擇):
SELECT cp.* FROM catalog_products AS cp
WHERE id NOT IN
(SELECT productID FROM catalog_product_category_bindings)
兩個查詢似乎是在我的錶速度方面非常相似(我沒有太多內容),但我相信第二個表現會更差,因爲它可能會循環遍歷catalog_products
表中的每個id
,並將它與每個從catalog_product_category_bindings
進行比較。更不用說它可能不會返回任何內容並完全中斷查詢(儘管這隻會在表被截斷時發生)。
你會說哪個更好?我個人更喜歡#1,因爲它更適合我的查詢生成器,看起來總體上更好。
你說得對。我也支持你 – Akhil