如何有效地合并两个mysql查询以返回匹配的记录?

时间:2012-04-11 16:43:57

标签: mysql sql join

我是相当愚蠢的(!)但是无法找到为mysql编写查询的最佳方法,并且我想在这里发布它以查看是否有人可以提供帮助(我正在使用PHP) 。我有5张桌子:

TUsers (ID, Name) 
TJobTypes (ID, Name) 
TJobs (ID, JobTypeID, JobName) 
TJobsRequested (ID, JobID, UserID) 
TJobsOffered (ID, JobID, UserID) 

FYI TJobs与TJobs的关系是一对多关系。

用户可以根据他们可以执行的工作以及需要/提供的工作来搜索工作交换。因此,如果User1搜索并说他需要'JobA'并且可以提供'JobB'并且User2被列为需要'JobB'做并且可以提供'JobA'那么这将是匹配。如果User2需要JobB但不能提供JobA那么它就不匹配了。编写查询以正确匹配这一点很容易,但用户还需要能够根据常规作业类型进行搜索(而不是特定的作业)。

因此,如果UserA正在搜索:'需要JobTypeA'并且'可以提供JobTypeB',那么匹配应该是在JobTypeA类别中有作业的所有用户,并且在JobTypeB类别中有一个作业(如果这有意义!)

如果您只是单向搜索(例如,显示在JobType = $ typecanhelp中列出需要工作的所有用户),那么这很容易,可以类似于:

SELECT DISTINCT TUsers.Fid, TUsers.FUsername, TUsers.FGender 
FROM TUsers, TJobsRequested, TJobs, TJobTypes 
WHERE TJobTypes.Fid='$typecanhelp' 
AND TJobs.FJobTypeID=TJobTypes.Fid 
AND TJobs.Fid=TJobsRequested.FJobID 
AND TUsers.Fid=TJobsRequested.FUserID 
ORDER BY TUsers.Fid

OR(用于显示列为提供JobType = $ typeneedhelp的作业的所有用户):

SELECT DISTINCT TUsers.Fid, TUsers.FUsername, TUsers.FGender 
FROM TUsers, TJobsOffered, TJobs, TJobTypes 
WHERE TJobTypes.Fid='$typeneedhelp' 
AND TJobs.FJobTypeID=TJobTypes.Fid 
AND TJobs.Fid=TJobsOffered.FJobID 
AND TUsers.Fid=TJobsOffered.FUserID 
ORDER BY TUsers.Fid

然而,我不能弄清楚如何将两者合并在一起,因为它们使用相同的基表(TJobs和TJobTypes)。有人能指出我如何合并上述两个查询的正确方向,以便返回提供JobType == $ jobcanhelp作业并需要JobType = $ jobsneedhelp的作业的用户吗?

1 个答案:

答案 0 :(得分:-1)

如果我理解正确你想要做INTERSECT我认为不支持mysql。看来你可以使用INNER JOIN来完成与mysql相同的操作。有关详细信息,请查看this similar questionthis page