2013-10-08 70 views
2

試想2個表,第一個是產品(商品)的列表,第二個聯接產品和另一個表(類別)之間的表,稱爲產品類別如何從一個連接表孤兒在MySQL

產品:

id | name 
------------ 
1  Lorem 
2  Ipsum 
3  Dolor 
4  Sit 

產品類別

product_id | categories_id 
--------------------------- 
1    3 
1    6 
4    1 
2    2 

如何讓孤兒元素,我的意思是在沒有任何類別的元素,所以在這種情況下:3,在一個有效的方式(+ 30K記錄)使用MyISAM?

這是有點像顯示,是不可加入的所有行,但是這句法接縫怪我......

回答

4
select * from products p 
left join product_categories pc on p.id=pc.product_id 
where pc.product_id is null 

將返回表中產品的所有產品中未發現PRODUCT_CATEGORY。 LEFT加入並且速度非常快。 30k的記錄也很少,所以不要擔心。

0
select p.id from products p left join product-categories c on p.id=c.product_id 
where c.id is NULL 
0

我也有類似的問題,我曾經使用類似以下

選擇p.id從商品P的左連接productscategories PC,其中pc.categories_id爲空

-hj

3

使用子查詢:

SELECT name FROM products 
WHERE id NOT IN (SELECT product_id FROM products-categories); 

使用JOIN

SELECT name FROM products 
LEFT JOIN products_categories ON (id=product_id) 
WHERE product_id IS NULL; 

不如去參加 sqlfiddle演示:http://sqlfiddle.com/#!2/684c1/8

+0

感謝迪帕克澄清和演示 –

+0

「IN」的工作非常緩慢,出於某種原因,「NOT IN」的作品更慢,至少比一左加入 – AdrianBR