2013-02-11 97 views
-1

我已经在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是不是很好:(

+0

这个查询应该返回一个错误 - 'where和StartDateTime>'2013-02-11''。你可以粘贴实际的查询吗? – 2013-02-11 11:53:43

+0

哎呦。我的错。我有复制/粘贴它,但已经取出了与问题无关的条款 - 因此,为什么一个'和'仍然在那里:) – 2013-02-11 11:56:46

+3

我不明白这是如何创建笛卡尔产品的 - 你可以装配一个SQLFiddle重现?你确定你不是每个客户/预约组合都只有一行吗?如果您遇到这种情况,您将获得每个约会的名字/姓氏。 – Bridge 2013-02-11 11:56:49

回答

1

我刚刚尝试了一个类似,但更简单的查询与数据库上的其他表,我仍然得到笛卡尔的产品。我相信有一个数据库的问题,而不是。查询我不是堆栈溢出确保任何人所能解决这个问题没有看到数据库

不管怎样,谢谢你们

1

意想不到的笛卡尔乘积通常是由于一个简单的拼写错误:。

相反这个:

from shared.Appointment a 
    join shared.Customer c on a.CustomerId=c.customerid 

也许您键入此:

from shared.Appointment a 
    join shared.Customer c on a.CustomerId=a.customerid 

单个字符会做到这一点。

+0

感谢您的尝试,但我三重检查。上面的查询是完全复制/粘贴的。 :( – 2013-02-11 13:04:08