0

我正在尝试查询数据库以返回一些匹配的记录,但无法以最有效的方式进行操作。我有一个 TUsers 表、一个 TJobsOffered 表和一个 TJobsRequested 表。UserID 是 TUsers 表的主键,并以一对多关系在 Job 表中使用。

最终,我想运行一个查询,该查询根据特定的 UserID 返回所有匹配用户的列表(例如,匹配的用户是在两个表中至少有一个匹配记录的用户,例如,如果 UserA 在 TJobsOffered 中列出了 jobid 999 并且 UserB 有TJobsRequested 中列出的 jobid 999 那么这是一个匹配项)。

为了尝试了解它,我对其进行了很多简化,并尝试根据相关用户的作业标识匹配记录,例如:

SELECT DISTINCT TJobsOffered.FUserID FROM TJobsOffered, TJobsRequested
WHERE TJobsOffered.FUserID=TJobsRequested.FUserID AND 
(TJobsRequested.FJobID='12' OR TJobsRequested.FJobID='30') AND
(TJobsOffered.FJobID='86' OR TJobsOffered.FJobID='5')

这似乎工作正常并返回正确的结果,但是当我引入 TUsers 表(以便我可以访问用户信息)时,它开始返回不正确的结果。我不明白为什么下面的查询没有返回与上面列出的结果相同的结果,因为它肯定仍然匹配相同的信息,只是使用不同的连接器(或者上面的一个实际上是多对多和一个低于 2一组一对多的比较)?

SELECT DISTINCT TUsers.Fid, TUsers.FName FROM TUsers, TJobsOffered, TJobsRequested
WHERE TUsers.Fid=TJobsRequested.FUserID AND TUsers.Fid=TJobsOffered.FUserID AND
(TJobsRequested.FJobID='12' OR TJobsRequested.FJobID='30') AND
(TJobsOffered.FJobID='86' OR TJobsOffered.FJobID='5')

如果有人能解释我在第二个查询中哪里出了问题,以及你应该如何合并 TUsers,那将不胜感激,因为我无法理解加入。如果您能够通过仅传递用户 ID 向我提供有关如何在一个查询中完成所有这些操作的任何指示,那么这也将不胜感激!:)

非常感谢,

戴夫

4

2 回答 2

1

试试这个

SELECT DISTINCT TJobsOffered.FUserID , TUsers.FName
FROM TJobsOffered
INNER JOIN  TJobsRequested ON TJobsOffered.FUserID=TJobsRequested.FUserID
LEFT JOIN TUsers ON TUsers.Fid=TJobsOffered.FUserID
WHERE  
(TJobsRequested.FJobID (12,30) AND
(TJobsOffered.FJobID IN (86 ,5)
于 2012-06-07T13:30:26.790 回答
0

您需要在 where 子句中添加“AND TJobsOffered.FUserID=TJobsRequested.FUserID”。

于 2012-06-07T13:28:05.213 回答