MySQL 关系 Select 问题

MySQL Relational Select Issue

我正在尝试 select 已添加用户的所有工作,但排除他们已拒绝的工作。我一直在调查 NOT EXISTS,但我无法用它排除被拒绝的工作。

Table:拒绝

+---------+---------+---------+----------+
|      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任何记录。

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

您可以使用 NOT IN 排除被拒绝的职位:

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,使用参数化查询,它比那样构建查询更安全。

如果你想使用 NOT EXISTS

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