MySQL LEFT JOIN与WHERE

时间:2011-03-23 13:47:16

标签: mysql left-join

我有两张桌子公司和流程。公司有现场company_id等。流程有字段company_id和status。我只想要公司表中的所有字段,而不包含状态为0的进程表中的那些字段。我对以下内容进行了调整,但即使是状态为0的进程表,也会给出公司的所有值。 / p>

SELECT  c.company_id
FROM    company c
LEFT JOIN 
   process p 
ON     c.company_id = p.company_id 
   AND p.status != '0'  

2 个答案:

答案 0 :(得分:3)

SELECT c.company_id 
FROM company c 
  LEFT JOIN process p 
    ON c.company_id = p.company_id 
WHERE p.status != '0'
  OR p.status IS NULL
;

第二个解决方案(编辑和简化): 这看起来不像“黑客”,不是吗?

SELECT c.company_id 
FROM company c 
WHERE c.company_id NOT IN
  ( SELECT company_id
    FROM process
    WHERE status = '0'
  )
;

第二个解决方案的问题是,如果您希望显示表process中的字段,则需要再加一个连接(此查询带有process)。

在第一个解决方案中,您可以安全地将第一行更改为SELECT c.company_id, c.company_title, p.statusSELECT c.*, p.*

答案 1 :(得分:2)

首先,你的代码正在执行LEFT JOIN而不是INNER JOIN,第二个你没有WHERE子句(你似乎在说AND而不是WHERE)。