SQL join with Where 子句仍然显示部分记录
SQL join with Where clause still displays part of record
我读过这个问题,因为它看起来很相似,但它对我的情况不太适用,而且我无法使这个解决方案适应我的问题:
Left Join With Where Clause
我的 SQL 查询当前包含对 production_id
列 JOBS
table 的连接,如下所示:
SELECT md.production_id,manufacture_id, pr.product_code,j.production_id as jobs,j.job_type
FROM MANUFACTURE_DATE md
INNER JOIN PRODUCTS pr
on md.production_id = pr.production_id
LEFT JOIN JOBS j
on md.production_id = j.production_id
WHERE active='1' AND date='2021-09-09'
ORDER BY product_code DESC;
这个returns一个product_code
在jobs
table中有一个记录job_type
为3
关于与 JOBS
table 的连接,我现在只想包含带有 job_type=1
而不是 job_type=2 or job_type=3
的值,所以我在加入如下:
SELECT md.production_id,manufacture_id, pr.product_code,j.production_id as jobs,j.job_type
FROM MANUFACTURE_DATE md
INNER JOIN PRODUCTS pr
on md.production_id = pr.production_id
LEFT JOIN JOBS j
on md.production_id = j.production_id AND j.job_type=1
WHERE active='1' AND date='2021-09-09'
ORDER BY product_code DESC;
这个returnsproduct_code在jobs
table中有一条记录,对jobs.production_id and jobs.job_type
显示NULL
我的目标是完全不显示此 product_code,因为它出现在 JOBS table 中,但不符合所需的 job_type
1.
您的问题可以通过两种方式解决:
使用内部连接而不是左连接(假设制造 Table 中存在的所有 production_ids 也存在于作业 Table 中)
SELECT md.production_id,manufacture_id,
pr.product_code,jobs.production_id as jobs,jobs.job_type
FROM MANUFACTURE_DATE md
INNER JOIN PRODUCTS pr
ON md.production_id = pr.production_id
INNER JOIN JOBS jobs
ON md.production_id = obs.production_id AND jobs.job_type=1
WHERE active='1' AND date='2021-09-09' ORDER BY product_code DESC;
在 job_type 上使用相同的过滤条件,但在 where 子句中还有一个条件:
SELECT md.production_id,manufacture_id,
pr.product_code,jobs.production_id as jobs,jobs.job_type
FROM MANUFACTURE_DATE md
INNER JOIN PRODUCTS pr
on md.production_id = pr.production_id
LEFT JOIN JOBS jobs
on md.production_id = jobs.production_id
WHERE active='1' AND date='2021-09-09'
AND (jobs.job_type=1 OR jobs.production_id IS NULL)
ORDER BY product_code DESC;
为什么你会出错可以通过下面给出的示例代码示例来解释link:
https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=876eb66e340e27b05ae543238b5a88ff
我读过这个问题,因为它看起来很相似,但它对我的情况不太适用,而且我无法使这个解决方案适应我的问题: Left Join With Where Clause
我的 SQL 查询当前包含对 production_id
列 JOBS
table 的连接,如下所示:
SELECT md.production_id,manufacture_id, pr.product_code,j.production_id as jobs,j.job_type
FROM MANUFACTURE_DATE md
INNER JOIN PRODUCTS pr
on md.production_id = pr.production_id
LEFT JOIN JOBS j
on md.production_id = j.production_id
WHERE active='1' AND date='2021-09-09'
ORDER BY product_code DESC;
这个returns一个product_code
在jobs
table中有一个记录job_type
为3
关于与 JOBS
table 的连接,我现在只想包含带有 job_type=1
而不是 job_type=2 or job_type=3
的值,所以我在加入如下:
SELECT md.production_id,manufacture_id, pr.product_code,j.production_id as jobs,j.job_type
FROM MANUFACTURE_DATE md
INNER JOIN PRODUCTS pr
on md.production_id = pr.production_id
LEFT JOIN JOBS j
on md.production_id = j.production_id AND j.job_type=1
WHERE active='1' AND date='2021-09-09'
ORDER BY product_code DESC;
这个returnsproduct_code在jobs
table中有一条记录,对jobs.production_id and jobs.job_type
我的目标是完全不显示此 product_code,因为它出现在 JOBS table 中,但不符合所需的 job_type
1.
您的问题可以通过两种方式解决:
使用内部连接而不是左连接(假设制造 Table 中存在的所有 production_ids 也存在于作业 Table 中)
SELECT md.production_id,manufacture_id, pr.product_code,jobs.production_id as jobs,jobs.job_type FROM MANUFACTURE_DATE md INNER JOIN PRODUCTS pr ON md.production_id = pr.production_id INNER JOIN JOBS jobs ON md.production_id = obs.production_id AND jobs.job_type=1 WHERE active='1' AND date='2021-09-09' ORDER BY product_code DESC;
在 job_type 上使用相同的过滤条件,但在 where 子句中还有一个条件:
SELECT md.production_id,manufacture_id, pr.product_code,jobs.production_id as jobs,jobs.job_type FROM MANUFACTURE_DATE md INNER JOIN PRODUCTS pr on md.production_id = pr.production_id LEFT JOIN JOBS jobs on md.production_id = jobs.production_id WHERE active='1' AND date='2021-09-09' AND (jobs.job_type=1 OR jobs.production_id IS NULL) ORDER BY product_code DESC;
为什么你会出错可以通过下面给出的示例代码示例来解释link: https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=876eb66e340e27b05ae543238b5a88ff