从mysql中的两个表中查找不常见的数据

时间:2013-12-31 09:23:11

标签: php mysql sql join

我正在使用类别,产品关系来查找数据。我的情况就像我有一个类别表和产品表与categoryid和产品类型。不,假设我有一个特定的类型,我想找到特定类型的产品没有的那些类别。  表格结构就像

Category Table
____________
|Id|Category|
| 1|    X   |
_____________

Product Table
____________________________
|ID | Product|Category| Type|
| 1 | Y      | 1      | 2   |
_____________________________

我可以使用像

这样的子查询找到它
SELECT * 
FROM   category 
WHERE  id NOT IN(SELECT category 
                 FROM   product 
                 WHERE  type = 2); 

有没有办法通过其他方式获得

我也使用像

这样的JOIN
SELECT * 
FROM   category AS c 
       JOIN products AS p 
         ON c.id <> p.category 
WHERE  p.type = 2 

为什么这不能给出适当的结果。

1 个答案:

答案 0 :(得分:6)

使用LEFT JOIN并使用IS NULL谓词:

SELECT * 
FROM   category AS c 
       LEFT JOIN products AS p 
              ON c.id = p.category 
                 AND p.type = 2 
WHERE  p.category IS NULL; 

第二个表中不匹配的行在category字段中将显示空值,WHERE p.category IS NULL将过滤并为您提供