您查詢等效於:
SELECT *
FROM wsrecruitcvhead AS CV, wsrecruittimes AS WT
WHERE CV.`ResumeTitle` LIKE '%search%'
OR ResumeSummaryIntroduction LIKE '%search%'
OR WT.`AvailableToWorkSunday` = 0
OR WT.`AvailableToWorkMonday` = 0
OR WT.`AvailableToWorkTuesday` = 0
OR WT.`AvailableToWorkWednesday` = 0
OR WT.`AvailableToWorkThursday` = 0
OR (WT.`AvailableToWorkFriday` = 0
AND CV.`ResumeID` = WT.`ResumeID`)
ORDER BY CV.ResumeID ASC;
這意味着兩個表格之間沒有很好的連接。瞭解如何使用顯式連接符號來保存自己這個悲痛:
SELECT *
FROM wsrecruitcvhead AS CV
JOIN wsrecruittimes AS WT
ON CV.`ResumeID` = WT.`ResumeID`
WHERE CV.`ResumeTitle` LIKE '%search%'
OR ResumeSummaryIntroduction LIKE '%search%'
OR WT.`AvailableToWorkSunday` = 0
OR WT.`AvailableToWorkMonday` = 0
OR WT.`AvailableToWorkTuesday` = 0
OR WT.`AvailableToWorkWednesday` = 0
OR WT.`AvailableToWorkThursday` = 0
OR WT.`AvailableToWorkFriday` = 0
ORDER BY CV.ResumeID ASC;
然而,儘管這是你查詢的簡單和直接的修改,你可能想到的:
SELECT *
FROM wsrecruitcvhead AS CV
JOIN wsrecruittimes AS WT
ON CV.`ResumeID` = WT.`ResumeID`
WHERE (CV.`ResumeTitle` LIKE '%search%'
OR ResumeSummaryIntroduction LIKE '%search%'
)
AND ( WT.`AvailableToWorkSunday` = 0
OR WT.`AvailableToWorkMonday` = 0
OR WT.`AvailableToWorkTuesday` = 0
OR WT.`AvailableToWorkWednesday` = 0
OR WT.`AvailableToWorkThursday` = 0
OR WT.`AvailableToWorkFriday` = 0
)
ORDER BY CV.ResumeID ASC;
甚至(因爲沒有明顯的理由省略星期六):
SELECT *
FROM wsrecruitcvhead AS CV
JOIN wsrecruittimes AS WT
ON CV.`ResumeID` = WT.`ResumeID`
WHERE (CV.`ResumeTitle` LIKE '%search%'
OR ResumeSummaryIntroduction LIKE '%search%'
)
AND ( WT.`AvailableToWorkSunday` = 0
OR WT.`AvailableToWorkMonday` = 0
OR WT.`AvailableToWorkTuesday` = 0
OR WT.`AvailableToWorkWednesday` = 0
OR WT.`AvailableToWorkThursday` = 0
OR WT.`AvailableToWorkFriday` = 0
OR WT.`AvailableToWorkSaturday` = 0
)
ORDER BY CV.ResumeID ASC;
您在OR和AND之間混合使用時,應在適用時加上括號。 – ajreal