好的,我有一个客户想要输出系统中一群学生的所有信息。
此输出将导入Excel以进行操作。
所以,我的问题是我想从4个表中输出所有学生的信息
试镜 预定试镜 型材 试镜时间
因此,试听表获取并输入将任何信息链接到学生,同时记录试听。在此之前,他们没有在db中进行试镜。
所以,我想为每个学生输出一行,说明他们的预定试镜时间,然后如果他们已经试图导入信息,但如果没有,就离开该领域空白。
到目前为止,我有类似的东西
"SELECT ".$fields." FROM profiles p, auditions a, scheduled_auditions s,
audition_times t WHERE p.id=t.id AND t.id=s.id AND a.id=p.id"
问题很明显。它只会输出有试镜的人。那么,如何编写条件select / where语句呢?我需要输出一个查询,这样当我在excel中打开它时它将起作用。
谢谢你们。我很难过。
答案 0 :(得分:2)
您是否考虑过使用 LEFT OUTER JOIN ?
如果使用内部联接连接表A和B,则只能获得A和B中存在的行。如果使用LEFT JOIN,则会获得A中的所有行。其中一些行将包含来自B如果存在的话。否则B中的那些列将为null。
编辑: LEFT JOIN B 在逻辑上等同于 B RIGHT JOIN A - 所以做出最有意义的事情(感谢保罗!)。
答案 1 :(得分:2)
您想要执行外部联接;即使连接的记录为空,外连接也会返回结果。
具体来说,在试镜表中指定你的案件中的LEFT OUTER JOIN会强制退回所有学生的记录,即使是那些没有试镜的记录。
答案 2 :(得分:2)
听起来你只需要一个外连接,这就像一个普通的连接,但是如果没有匹配的键,它只会为每个字段返回NULL。
SELECT *
FROM profiles p
LEFT OUTER JOIN audition_times t
ON p.id=t.id
LEFT OUTER JOIN scheduled_auditions s
ON t.id=s.id
LEFT OUTER JOIN auditions a
ON a.id=p.id"
答案 3 :(得分:2)