SQL不需要的笛卡尔积

时间:2013-02-11 11:51:27

标签: sql

我以前在SQL中做了很多连接,但是这个不想工作 - 我得到了一个笛卡尔积,我不知道为什么。我有两个表(在此上下文中) - 一个用于约会,另一个用于客户。 CustomerId是customer表的主键,是约会表的外键。

我想要实现的是运行一个查询,显示所有约会以及客户的NAME(存储在客户表中)。

这是我的疑问:

    SELECT a.AppointmentId
    ,a.Subject
    ,a.StartDateTime
    ,c.CustomerId
    ,c.FirstName
    ,c.lastname
FROM shared.Appointment a
INNER 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;

结果是一个可怕的笛卡尔积,只有在我开始将第一个/最后一个名称添加到选择部分时才会出现。

谁能看到我做错了什么?

2 个答案:

答案 0 :(得分:1)

我刚刚尝试了与数据库上的其他表格相似但更简单的查询,我仍然得到了笛卡尔积。我相信数据库存在问题,而不是查询。我不确定堆栈溢出是否有可能在没有看到数据库的情况下解决这个问题。

无论如何,谢谢你们。

答案 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

单个角色会这样做。