为什么在数据库中没有重复的情况下,此SQL查询返回重复的记录?

问题描述:

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 

让我知道如果你们需要更多的信息,非常感谢。

您正在从表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

的问题是这一行:

FROM support_systems,门票

我会从删除票FROM子句,并使其内部联接子句。现在你有什么叫做“跨产品”:http://en.wikipedia.org/wiki/Cross_product

我不得不说,它可能是监守你有一个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 

那么你哪里会是相同的...,它会返回基于正确连接表。