如何从mysql中的连接表中获取孤儿

时间:2013-10-08 07:38:09

标签: mysql sql myisam

想象一下2个表,第一个是产品列表(产品),第二个是产品和另一个表(类别)之间的连接表,称为产品类别

产品:

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

产品类别

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

如何获取孤儿元素,我的意思是没有类别的元素,所以在这种情况下:3,使用MyISAM以高效的方式(+ 30k记录)?

这有点像显示所有不可连接的行,但这种语法对我来说很奇怪......

4 个答案:

答案 0 :(得分: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的记录也很少,所以不用担心。

答案 1 :(得分:3)

使用SubQuery:

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

一旦我使用了类似的内容

,我就遇到了类似的问题

从产品中选择p.id p left join productscategories pc其中pc.categories_id为null

-hj