2013-02-28 87 views
0

我试图从一个查询中的三个表中获取信息。我不知道是否有可能做到这一点......迄今为止我尝试过的方法没有奏效,但我也不是那么熟悉SQL。在SQL查询中显示行或NULL

我有三个表:registration,持有注册信息,experience,其中包含事件的选择,为客户(如果他们选择了晚餐,午餐,一天等),以及additionalInfo,其中包含附加的事件信息如在活动期间他们选择特定的研讨会。 registrationexperience将始终有值,但additionalInfo将不保证具有值。我想要得到的是在单个查询中获取注册和事件选择,并且如果additionalInfo中有东西检索那个,或者返回NULL

我想这个查询:

SELECT registration.firstName, registration.lastName, registration.phone, experience.options, additionalInfo.workshops 
FROM registration, experience, additionalInfo 
WHERE registration.identifier = experience.identifier 
AND experience.paid = 'Yes' 
AND registration.eventName = 'march2013' 
AND additionalInfo.identifier = registration.identifier 
ORDER BY registration.lastName ASC 

此查询仅返回在其中additionalInfo.identifier存在的价值,但正如我所说,这是不能保证存在。

+0

的问题已经回答了,但可能我只想补充一点,“ASC”,通常并不需要为这是ANSI默认的排序行为。因此“ORDER BY registeration.lastName”就足够了。通常,您在多个字段上的多个方向进行订购时明确使用ASC。 – Trent 2013-02-28 17:14:31

回答

5

使用LEFT JOIN

SELECT registration.firstName, 
     registration.lastName, 
     registration.phone, 
     experience.options, 
     additionalInfo.workshops 
FROM registration 
     INNER JOIN experience 
      ON registration.identifier = experience.identifier 
     LEFT JOIN additionalInfo 
      ON additionalInfo.identifier = registration.identifier 
WHERE experience.paid = 'Yes' AND 
     registration.eventName = 'march2013' 
ORDER BY registration.lastName ASC 

为了进一步获得更多的知识有关加入,请访问以下链接:

0

除了用左联接

你也可以检查数据返回的结果集基地有

resultset.eof

我总是用这个来检查数据库返回的任何