Php 如果其他表中没有匹配项,则选择mySQL
我有两张桌子:家长和学生 学生表将父id作为外键,学生的状态可以是FULL或LEFT。多个学生可以属于一个家长条目 我需要选择只有状态为“LEFT”的学生的所有父行,即,如果他们有两个学生,一个是LEFT,另一个是FULL,则将忽略此父行 我试过很多问题,但不知道如何解决。我还考虑过把所有的学生作为一个查询,然后以某种方式循环查询结果,把那些没有全日制学生但还没有成功的家长拉出来 任何帮助都将不胜感激Php 如果其他表中没有匹配项,则选择mySQL,php,mysql,sql,Php,Mysql,Sql,我有两张桌子:家长和学生 学生表将父id作为外键,学生的状态可以是FULL或LEFT。多个学生可以属于一个家长条目 我需要选择只有状态为“LEFT”的学生的所有父行,即,如果他们有两个学生,一个是LEFT,另一个是FULL,则将忽略此父行 我试过很多问题,但不知道如何解决。我还考虑过把所有的学生作为一个查询,然后以某种方式循环查询结果,把那些没有全日制学生但还没有成功的家长拉出来 任何帮助都将不胜感激 我正在使用PHP您可以使用exists和non exists只获取students表中状态为l
我正在使用PHP您可以使用exists和non exists只获取students表中状态为left的家长
select * from parent p
where exists ( select 1 from student s
where s.status ='LEFT'
and s.parent_id = p.id
)
and not exists ( select 1 from student s
where s.status ='FULL'
and s.parent_id = p.id
)
我建议连接父id上的表和
,其中
”对没有完整学生的行执行查询。类似这样(未经测试):
一张画得不好的图表 简单地说: 您可以在子查询中分别提取“left”和“full”,并在没有“full”条目的情况下执行left外部联接
SELECT t1.p_id
,t1.STATUS
FROM (
(
SELECT p_id
,STATUS
FROM student
WHERE STATUS = 'left'
) t1 LEFT OUTER JOIN (
SELECT p_id
,STATUS
FROM student
WHERE STATUS = 'full'
) t2 ON t1.p_id = t2.p_id
)
WHERE t2.p_id IS NULL
GROUP BY t1.p_id
,t1.STATUS;
SQL小提琴链接
查看=>感谢您的链接,这是一个展示连接工作原理的好方法。但这对如何根据列条目选择我想要的数据没有什么帮助(除非我忽略了什么?),我可以选择所有学生并将他们与家长匹配,但仍然不确定如何仅返回所有家长学生留下的数据。欢迎。看看下面给出的答案;看起来很有希望。
SELECT t1.p_id
,t1.STATUS
FROM (
(
SELECT p_id
,STATUS
FROM student
WHERE STATUS = 'left'
) t1 LEFT OUTER JOIN (
SELECT p_id
,STATUS
FROM student
WHERE STATUS = 'full'
) t2 ON t1.p_id = t2.p_id
)
WHERE t2.p_id IS NULL
GROUP BY t1.p_id
,t1.STATUS;