从多个查询

时间:2017-10-30 21:07:45

标签: sql ms-access report

我已经浏览了一些关于这个主题的答案,但他们都建议使用UNION查询,我很确定这不是我的情况,因为我试图从中提取数据的表格根本不同。我会尽力解释自己的能力。

我有三张桌子:

  
      
  • 客户
  •   
  • 约会
  •   
  • 购买
  •   

我希望用户能够选择单个客户并获得包含以下信息的报告:

  
      
  • 所有客户信息(姓名,电子邮件,地址等)
  •   
  • 客户预订的所有约会
  •   
  • 客户所做的所有购买
  •   

当客户在数据库中没有约会或购买时出现问题,因为我目前使用的单个查询执行以下操作:

SELECT (info needed)
FROM (Customer INNER JOIN Purchase ON Customer.ID = Purchase.customerID)
INNER JOIN Appointment ON Customer.ID = Appointment.customerID;

如果客户在Purchase或Appointment表中没有customerID,则生成的查询将返回一个空表,因为JOIN将无法在表之间看到任何共享数据。

我不确定最佳行动方案是什么,我希望这里有人可以提前了解这种情况下的最佳做法,提前谢谢。

建议编辑以添加一些样本数据和所需结果。

  

客户

ID   Name  email           address
 1   Bob   bob@gmail.com   70 bowman st.
 2   Tom   tom@gmail.com   44 shirley av.
 3   Mary  mary@gmail.com  4 goldfield rd.
  

购买

customerID itemID price
1          23     100
1          24     150
3          34     85
  

约会

customerID date
1          2/10
2          3/10
3          3/10

现在,如果我使用customerID = 2查询,我想要以下信息

  

客户信息

name   email          address
Tom    tom@gmail.com  44 shirley av.
  

购买

empty
  

约会

date
3/10

1 个答案:

答案 0 :(得分:1)

使用左连接而不是内连接。因此,即使他没有预约或购买,您也可以获得客户详细信息

SELECT (info needed)
  FROM Customer Left 
  JOIN Purchase 
    ON Customer.ID = Purchase.customerID
Left JOIN Appointment 
  ON Customer.ID = Appointment.customerID;