为什么在数据库中没有重复的情况下,此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#
答
的问题是这一行:
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
那么你哪里会是相同的...,它会返回基于正确连接表。
的support_systems表有一个ID列(support_system_id),这是一个FK的门票表。票据表中有一个id列(ticket_id),它是user_access表中的FK。 user_access表还有另一个FK,即user_id列。 – 2011-02-14 17:29:16