过滤左连接输出

时间:2018-02-19 09:04:28

标签: mysql left-join

我有 职位表,包含字段

jobId,jobTitle,jobDesc

jobQuotes表,包含字段

id,user_id,quote

jobQuotes表包含为该作业提供报价的用户的报价。

我需要那些特定用户没有给出任何报价的工作。

使用LEFT JOIN无论jobQuotes表如何,我都可以获得所有工作。

并且INNER JOIN仅提供具有相关jobQuote的所有作业。

但是我需要那些特定用户没有给出任何引用的工作。

我的查询

SELECT * FROM dummy_jobs J LEFT JOIN jobQuotes JQ ON J.jobId=JQ.jobId WHERE MATCH (J.jobTitle, J.jobDescription) AGAINST ('php, mysql');

如何过滤此结果集以使输出在jobQuotes中没有特定的user_id?

2 个答案:

答案 0 :(得分:1)

SELECT jobstable.jobid from jobstable inner join 
(SELECT id from jobQuotes where userid = 953 and quote IS NULL) dummy_table    
on dummy_table.id == jobstable.jobid;

答案是根据您给出的评论

“我希望userId = 953的所有作业都没有给出任何引用”

答案 1 :(得分:0)

一种方法可能是通过使用交叉连接将特定用户与所有作业相关联,然后使用空测试将其连接到作业引号以查找未引用的作业。 例如

用户

+----+----------+
| id | username |
+----+----------+
|  1 | John     |
|  2 | Jane     |
|  3 | Ali      |
|  6 | Bruce    |
|  7 | Martha   |
+----+----------+

工作

+-------+----------+---------+
| jobId | jobTitle | jobDesc |
+-------+----------+---------+
|     1 | a        | a       |
|     2 | b        | b       |
|     3 | c        | c       |
+-------+----------+---------+

Jobquotes

+------+---------+-------+
| id   | user_id | quote |
+------+---------+-------+
|    1 |       3 |    10 |
|    2 |       2 |    10 |
+------+---------+-------+

select t.id,t.username,t.jobid,t.jobtitle,t.jobdesc
from
(
select u.id,u.username, s.jobid,s.jobtitle,s.jobdesc
from users u
cross join (select distinct jobid , jobtitle, jobdesc from jobs) s
where u.id = 3
) t
left join jobquotes jq on jq.id = t.jobid and jq.user_id = t.id 
where jq.id is null

结果

+----+----------+-------+----------+---------+
| id | username | jobid | jobtitle | jobdesc |
+----+----------+-------+----------+---------+
|  3 | Ali      |     2 | b        | b       |
|  3 | Ali      |     3 | c        | c       |
+----+----------+-------+----------+---------+