我正在尝试查询数据库以返回一些匹配的记录,但不知道如何以最有效的方式执行此操作。我有一个 TUsers 表、一个 TJobsOffered 表和一个 TJobsRequested 表。 UserID 是 TUsers 表的主键,并在 Job 表中以一对多关系使用。
最终我想运行一个查询,根据特定的 UserID 返回所有匹配用户的列表(例如,匹配用户是在两个表中至少有一个匹配记录的用户,例如,如果 UserA 在 TJobsOffered 中列出了 jobid 999并且 UserB 在 TJobsRequested 中列出了 jobid 999,那么这是一个匹配)。
为了尝试理解它,我已经将其简化了很多,并尝试根据相关用户的 jobid 来匹配记录,例如:
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 在一个查询中完成这一切的任何指示,那么我也将非常感激! :)
非常感谢
戴夫
最佳答案
试试这个
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)
关于mysql - 如何查询3个mysql表并返回匹配结果(一对多关系)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10932726/