2013-10-08 27 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