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?
答案 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 |
+----+----------+-------+----------+---------+