2013-02-11 32 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