我有两张桌子公司和流程。公司有现场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'
答案 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.status
或SELECT c.*, p.*
。
答案 1 :(得分:2)
首先,你的代码正在执行LEFT JOIN而不是INNER JOIN,第二个你没有WHERE子句(你似乎在说AND而不是WHERE)。