Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL关系选择问题_Mysql_Relational Database - Fatal编程技术网

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。再次感谢!