-1

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

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

这是我的查询:

    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;

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

谁能看到我做错了什么?

4

2 回答 2

1

我刚刚尝试对数据库上的其他表进行类似但更简单的查询,并且仍然得到笛卡尔积。我相信数据库有问题,而不是查询。我不确定堆栈溢出的任何人都可能在不查看数据库的情况下解决此问题。

无论如何,谢谢你们。

于 2013-02-11T12:37:29.647 回答
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

一个角色就可以做到。

于 2013-02-11T12:55:36.963 回答