我已经在SQL中做了大量的连接,但是这个不想工作 - 我得到了一个笛卡尔积,我不知道为什么。我有两张桌子(在这方面) - 一个用于约会,另一个用于顾客。 CustomerId是客户表的主键,是预约表的外键。SQL不需要的笛卡尔积
我想要实现的是运行一个查询,显示所有约会以及客户的名称(存储在客户表中)。
这是我的查询:
select a.AppointmentId,
a.Subject,
a.StartDateTime,
c.CustomerId,
c.FirstName,
c.lastname
from shared.Appointment a
join shared.Customer c on a.CustomerId=c.customerid
where a.BusinessCode='bp'
and StartDateTime > '2013-02-11'
and a.CustomerId > 0
group by c.customerid,
a.AppointmentId,
a.Subject,
a.CustomerId,
a.StartDateTime,
c.FirstName,
c.lastname
order by a.AppointmentId
结果是可怕的笛卡尔乘积,其中只有一次我在第一/姓氏开始添加到选择部分发生。
任何人都可以看到我做错了什么?我只是在愚蠢吗?
编辑:为什么这个问题已被-1'd?如果我的问题不好,请告诉我为什么我会改进它。匿名-1是不是很好:(
这个查询应该返回一个错误 - 'where和StartDateTime>'2013-02-11''。你可以粘贴实际的查询吗? – 2013-02-11 11:53:43
哎呦。我的错。我有复制/粘贴它,但已经取出了与问题无关的条款 - 因此,为什么一个'和'仍然在那里:) – 2013-02-11 11:56:46
我不明白这是如何创建笛卡尔产品的 - 你可以装配一个SQLFiddle重现?你确定你不是每个客户/预约组合都只有一行吗?如果您遇到这种情况,您将获得每个约会的名字/姓氏。 – Bridge 2013-02-11 11:56:49