我已經在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