查询连接表

时间:2013-11-15 22:53:58

标签: mysql sql join

我有3张桌子: 产品,类别和产品_to_category。

产品

id     name
1      monitor
2      computer
3      speaker
4      lcd
5      microphone

类别

id     name
1      displays
2      speakers

product_to_category

id     product_id      category_id
1      1               1
2      4               1
3      3               2

我需要这样的东西:“扬声器”类别中的所有产品和不属于任何类别(计算机和麦克风)的产品

product_id   product_name
2            computer
3            speaker
5            microphone

我需要一个查询。我已经完成了两个查询,但我需要一个查询,因为 http://datatables.net/

2 个答案:

答案 0 :(得分:0)

尝试

Select 
  Product.id,product.name
From
  product 
    left outer join product_to_category As ptc 
    on product.id = ptc.product_id
Where 
  ptc.category_id = 2 
  or 
  isnull(ptc.id,0)=0
Group by 
  product.id, product.name

如果使用mysql ..

,请使用ifnull代替isnull

答案 1 :(得分:0)

替代WHERE条款:

SELECT product.id, product.name
FROM product
LEFT JOIN product_to_category AS ptc
  ON product.id = ptc.product_id
WHERE IFNULL(ptc.category_id, 0) IN(0, 2);

SQL小提琴链接:http://sqlfiddle.com/#!2/7aaeff/8