2011-06-06 230 views
1

好的,所以我有一个客户想要为系统中的一群学生输出所有信息。MySQL条件选择语句?

该输出将被导入到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

如果可以的话,共享这些表的DDL代码。 – 2011-06-06 22:24:47

回答

2

您想要执行外连接;即使联接记录为空,外部联接也会返回结果。

具体来说,在试镜桌上指定一个LEFT OUTER JOIN将会强制返回所有学生的记录,即使是没有试镜的记录也会被返回。

+0

RIGHT OUTER可以同样适用...适当的玩杂耍桌子。 – 2011-06-06 22:27:50

2

您是否考虑使用LEFT OUTER JOIN

如果您将表A和B连接到一个内部联接,则只会获得存在于A和B中的行。如果使用LEFT JOIN,您将获得A中的所有行。其中一些行将包含数据从B存在。否则,来自B的那些列将是空的。

编辑:左JOIN B在逻辑上等同于b右键加入 - 如此为所欲为是最有意义的在你的头上(感谢保罗!)。

+0

RIGHT OUTER也可以和适当的玩杂耍表一样工作。 – 2011-06-06 22:25:50

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"