4

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

产品:

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

4 回答 4

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

将返回 product_Category 中未找到的表 products 中的所有产品。LEft join 和 where 非常快。30k 记录也很少,所以不用担心。

于 2013-10-08T07:40:50.677 回答
4

使用子查询:

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

于 2013-10-08T07:47:59.047 回答
0
select p.id from products p left join product-categories c on p.id=c.product_id 
where c.id is NULL
于 2013-10-08T07:41:49.650 回答
0

一旦我使用了类似以下的东西,我遇到了类似的问题

select p.id from products p left join productscategories pc where pc.categories_id is null

-hj

于 2013-10-08T07:45:19.657 回答