mysql - 如何查询3个mysql表并返回匹配结果(一对多关系)?

标签 mysql database join

我正在尝试查询数据库以返回一些匹配的记录,但不知道如何以最有效的方式执行此操作。我有一个 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/

相关文章:

mysql - 限制表1中最多10个id,并从表2中获取与表1的id匹配的所有记录

MySQL:对存储过程参数使用选择语句

database - 在数据库中存储加密的用户名哈希

python - Pandas 合并和求和数据帧

php - Laravel RouteServiceProvider 中的显式路由模型绑定(bind)问题

java - 手动关闭应用程序并调用方法? [JavaFX]

mysql - 我知道 GUID 几乎是唯一的。但是假设它是独一无二的是可以接受的做法吗?

android - 整体更新实体与更新分离的特定列

mysql - 我的数据库中可以有 100 万个表吗?

mysql - 将 2 个 select 语句重写为一个 JOIN 语句