MySQL从多行中选择
使用MySQL,我试图提取所有MySQL从多行中选择,mysql,sql,Mysql,Sql,使用MySQL,我试图提取所有人谁的公司id匹配3,并比较个人是否存在于收藏夹表中 我注意到,如果一个人没有job\u id,那么下面的查询不会输出他们 下面的查询输出1行,但在people表中有3行与3的company\u id匹配 SELECT *, j.company_id as companyid, f.id IS NOT NULL AS jid,
人
谁的公司id
匹配3
,并比较个人
是否存在于收藏夹
表中
我注意到,如果一个人没有job\u id
,那么下面的查询不会输出他们
下面的查询输出1行,但在people
表中有3行与3的company\u id
匹配
SELECT *,
j.company_id as companyid,
f.id IS NOT NULL AS jid,
p.id as pid,
f.id AS fave_id,
f.id IS NOT NULL AS fave
FROM people p
INNER JOIN job j
ON p.job_id = j.id
LEFT JOIN favourites f
ON f.people_id=p.id
AND f.user_id = 12
WHERE p.company_id = 3
ORDER BY p.id ASC
任何帮助都将使查询输出匹配的所有行,并检查收藏夹表。如果您在作业上放置左联接,它将显示没有作业id的人员。我已更新了小提琴
您应该将作业表的内部联接更改为左外部联接,这样无论它们是否存在于作业表中,它们都会被选中。您正在按作业id对作业进行内部联接,但在人员表上没有匹配的值,通过匹配值,我指的是要查看的一行有一个空字符串条件左连接和左外连接是同义的。。。但这不是这里的问题。用户的示例使用了内部联接,我建议将其更改为左联接。不,我理解。。如果您查看数据,左连接不会有多大区别,除非您像其他答案一样在select中指定NOTNULL。。。因为收藏夹表中的job_id为空值,job_id为空字符串,所以数据中存在一些无效日期。我已更新架构,请参见此处:
SELECT
p.*,
j.company_id as companyid,
f.id IS NOT NULL AS jid,
p.id as pid,
f.id AS fave_id,
f.id IS NOT NULL AS fave
FROM people p
LEFT JOIN job j
ON j.id = p.job_id
LEFT JOIN favourites f
ON f.people_id=p.id
AND f.user_id = 12
WHERE p.company_id = 3
ORDER BY p.id ASC