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

rAV*_*AVi 5 php mysql sql join

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

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

Product Table
____________________________
|ID | Product|Category| Type|
| 1 | Y      | 1      | 2   |
_____________________________
Run Code Online (Sandbox Code Playgroud)

我可以通过使用子查询来找到它

SELECT * 
FROM   category 
WHERE  id NOT IN(SELECT category 
                 FROM   product 
                 WHERE  type = 2); 
Run Code Online (Sandbox Code Playgroud)

有没有办法通过另一种方式获得它

我也喜欢使用JOIN

SELECT * 
FROM   category AS c 
       JOIN products AS p 
         ON c.id <> p.category 
WHERE  p.type = 2 
Run Code Online (Sandbox Code Playgroud)

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

Mah*_*mal 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; 
Run Code Online (Sandbox Code Playgroud)

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