以下 select 语句返回零结果,为什么?
SELECT `post_job`.`id`,
`post_job_description`.`title`,
`employers_description`.`name`
FROM (`post_job`)
LEFT JOIN `post_job_description`
ON `post_job`.`id` = `post_job_description`.`post_job_id`
LEFT JOIN `employers_description`
ON `post_job`.`employers_id` = `employers_description`.`id`
WHERE `post_job`.`published` = 1
AND `post_job_description`.`language` IN ('en')
AND `employers_description`.`language` IN ('en')
AND `post_job`.`deleted` = 0
GROUP BY `post_job_description`.`post_job_id`
LIMIT 25
当我删除它时:
AND `employers_description`.`language` IN ('en')
它返回数据,但 employers_description
的值。name
不是英文
post_job 表:
post_job_description 表:
employers_description 表:
最佳答案
这ON
子句:
`post_job`.`employers_id` = `employers_description`.`id`
用于加入employers_description
表到 post_job
表。
只从 post_job
中选择了 单个 行表(根据您发布的示例数据):
id employers_id published deleted
---------------------------------
1 2 1 0
根据上述ON
子句,以下一行也是来自 employers_description
的唯一一行正在被 LEFT JOIN
获取:
name id language
-----------------
MaIT ar 2 ar
因此,这个谓词:
`employers_description`.`language` IN ('en')
过滤掉这一行,你没有得到任何结果。如果你从 WHERE
中取出这个谓词子句,那么你会返回这一行,但是,正如你从上面看到的,language = ar
.
您必须更改 id
name = MaIT ar
的记录值来自 2
至 1
, 所以来自 employers_description
的两个语言版本由 LEFT JOIN
获取操作(如 post_job_description
表中的情况)。
作为旁注,也许您应该考虑规范化 post_job_description
和 employers_description
保持表格 language
每个帖子和language
每个员工的信息在单独的表中。
关于mysql - 多左连接的正确语法是什么?左表的条件是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31077506/