MySQL关系选择问题
我正在尝试选择用户已添加到的所有作业,但不包括他们已拒绝的作业。我一直在调查“不存在”,但我无法用它来排除被拒绝的工作 表:谢绝MySQL关系选择问题,mysql,relational-database,Mysql,Relational Database,我正在尝试选择用户已添加到的所有作业,但不包括他们已拒绝的作业。我一直在调查“不存在”,但我无法用它来排除被拒绝的工作 表:谢绝 +---------+---------+---------+----------+ | id | job_id | user_id | declined | +---------+---------+---------+----------+ | 15 | 223 | 25 | 1 | | 100 |
+---------+---------+---------+----------+
| id | job_id | user_id | declined |
+---------+---------+---------+----------+
| 15 | 223 | 25 | 1 |
| 100 | 156 | 50 | 1 |
| 125 | 651 | 60 | 1 |
+---------+---------+---------+----------+
当前查询。选择他们已添加到的所有职务,以及他们已拒绝的职务
SELECT
job.*, applicants.*, declined.*
FROM job
JOIN applicants ON job.job_id = applicants.job_id
LEFT OUTER JOIN declined ON job.job_id = declined.job_id
WHERE applicants.user_id = '" . $userId . "' AND applicants.recruited = 1
尝试失败。这显然不会选择任何记录
SELECT
job.*, applicants.*, declined.*
FROM job
JOIN applicants ON job.job_id = applicants.job_id
LEFT OUTER JOIN declined ON job.job_id = declined.job_id
WHERE applicants.user_id = '" . $userId . "' AND applicants.recruited = 1 AND declined.declined = 0
您可以使用
不在中排除拒绝的作业:
SELECT
job.*, applicants.*
FROM job
JOIN applicants ON job.job_id = applicants.job_id
WHERE applicants.user_id = '" . $userId . "' AND applicants.recruited = 1
AND job.job_id not in (
SELECT DISTINCT job_id from declined where user_id = '" . $userId . "' and declined = 1
)
还有一件事-不确定您使用的是什么语言,但您不应该这样设置$userId,使用参数化查询,它比构建这样的查询安全得多 如果要使用,则不存在
SELECT
job.*, applicants.*
FROM job, applicants
WHERE job.job_id = applicants.job_id
AND NOT EXISTS
(SELECT 1 FROM declined WHERE job.job_id = declined.job_id AND declined.user_id = applicants.user_id AND declined.declined = 1)
AND applicants.user_id = '" . $userId . "'
AND applicants.recruited = 1
谢谢你。是的,在不久的将来,我们将转向参数化PDO。再次感谢!