2011-12-18 58 views
6

我對我的產品來檢查我賣(主要是遊戲機和遊戲)MySQL錯誤在我的查詢

我希望看到哪些產品有哪些類別,這是我的查詢:

select * From products left join products_categories on (product_id=id) ; 
+------+------+------------+-------------+---------- 
| id | name | product_id | category_id | and more 
+------+------+------------+-------------+---------- 
| 4 | Xbox |   4 |   2 | 
| 5 | PS3 |   5 |   2 | 
| 7 | BAD |  NULL |  NULL | 
etc... 
+------+------+------------+-------------+--------- 

這裏我有一個產品(#7 - 壞),我不想看到,因爲我刪除類別,

我不想看到產品沒有類別?

+0

你只是想看看'products'那些在'products_categories'匹配的條目?在這種情況下,你需要一個'INNER JOIN'而不是'LEFT JOIN'。 – grossvogel 2011-12-18 17:57:56

回答

8

左JOIN命令用於結合空匹配的行被存儲在相關表 爲了加入這些表中,連接表 要求從左側 表的公共字段(通常稱爲外鍵) 。這種連接類型需要關鍵字ON或USING。

實施例:

SELECT * 
From products 
LEFT JOIN products_categories ON (product_id=id) 
WHERE product_id IS NOT NULL; 

或者可以使用的INNER JOIN:

加入或INNER JOIN命令用於結合非空匹配 行被存儲在相關表爲了連接這些表, 連接表需要左表中的公用字段(通常稱爲外鍵) 。這種連接類型需要關鍵字ON或USING。

例子:現在

SELECT * From products INNER JOIN products_categories ON (product_id=id); 

,我會建議增加一個標誌無效或有效的產品,這樣你就不需要刪除類別產品,如果它是無效的。這樣,如果你想重新激活它,只需將標誌返回到1或你使用的任何標誌。

例子:

SELECT * 
FROM products 
INNER JOIN products_categories ON (product_id=id) 
WHERE products.is_active = 1; 
+0

感謝您的提示 – fred 2011-12-18 18:05:21

+0

歡迎您 – 2011-12-18 18:05:56

+0

順便說一句,圍繞ON子句的括號是多餘的。 – 2011-12-18 18:13:09