2011-02-14 70 views
1
SELECT * 
FROM support_systems,tickets 
INNER JOIN user_access ON tickets.support_system_id = user_access.support_system_id 
WHERE support_systems.account_id = #session.account_id# 
AND user_access.user_access_level >= 1 
AND user_access.user_id = #session.user_id# 

任何線索爲什麼這個查詢會返回一個重複記錄的記錄集?結果看起來像這樣:爲什麼在數據庫中沒有重複的情況下,此SQL查詢返回重複的記錄?

Priority ID  Subject   Status 
high  1  First Subject open 
high  1  First Subject open 
low   3  Weeee   open 
low   3  Weeee   open 
medium  4  hhhhh   closed 
medium  4  hhhhh   closed 
medium  5  neat   open 
medium  5  neat   open 

讓我知道如果你們需要更多的信息,非常感謝。

回答

4

您正在從表support_system中選擇記錄,但尚未指定連接條件。這張桌子和你正在審問的其他人之間有什麼關係?

您可能希望這樣的事情

SELECT * 
FROM support_systems 
INNER JOIN tickets ON 
support_systems.support_system_id = tickets.support_system_id 
INNER JOIN user_access ON 
tickets.support_system_id = user_access.support_system_id 

WHERE support_systems.account_id = #session.account_id# 
AND user_access.user_access_level >= 1 
AND user_access.user_id = #session.user_id# 
+0

的support_systems表有一個ID列(support_system_id),這是一個FK的門票表。票據表中有一個id列(ticket_id),它是user_access表中的FK。 user_access表還有另一個FK,即user_id列。 – 2011-02-14 17:29:16

1

我不得不說,它可能是監守你有一個explicite聯接和非explicite加入的心不是在處理這哪裏是生產笛卡爾...

你在使用的三個表...

但只有兩個表的連接......你需要一個第二個加入...你需要在某個地方參加support_systems。

可能喜歡

from support_systems a left join user_access b on a.support_systems_id = b.support_systems_id 
left join ticket c on c.support_systems_id = b.support_systems_id 

那麼你哪裏會是相同的...,它會返回基於正確連接表。