我有三张桌子,即A、B和C。
表A的架构和值:
UID CITY NAME
0 Bangalore UserA
1 Hyderabad UserB
表B的架构和值:
UID JID DETAILS
0 1 Some Text
0 2 Some Text
1 3 Some Text
表C的架构和值:
UID JID Applied
0 3 Yes
1 1 Yes
现在,我需要得到所有三个表的详细信息,这样UID=0并从第三个表C中检索JID。
为此,我编写了一个mysql查询:
select
a.uid,
a.city,
a.name,
b.jid,
b.details
from
tableB b
INNER JOIN tableA a on b.uid=a.uid
where
jid in(
select c.jid
from tableC,tableB
where tableC.uid=0 and tableC.jid=tableB.jid
);
这给了我以下的输出:
UID CITY NAME DETAILS APPLIED
0 BANGALORE UserA sometext yes
但是现在如果我想要第三个表c中不存在的记录,也就是在本例中的JID 2和JID 3,我无法从下面的查询中得到正确的结果。
select
a.uid,
a.city,
a.name,
b.jid,
b.details
from
tableB b
INNER JOIN tableA a on b.uid=a.uid
where jid in(
select c.jid
from tableC,tableB
where tableC.uid=0 and tableC.jid!=tableB.jid
);
基本上,我在这里要实现的是下面的场景:TableA=Users protfolio.TableB=Jobs posted by Users.TableC=Users applied for which Jobs(通过JID(JobIDs)标识的)用户,现在一个用户可以申请多个作业,每当一个用户申请作业,就会在第三个TableC上做一个条目,记录哪个用户申请了哪个作业,现在,我有申请工作的数据,我需要查询未申请工作。
你能告诉我到底哪里出错了吗。
最佳答案
第一个问题不应该是。。。
SELECT a.uid
, a.city
, a.name
, b.jid
, b.details
FROM tableB b
JOIN tableA a
ON b.uid = a.uid
JOIN tableC c
ON c.jid = b.jid
WHERE tableC.uid = 0;
所以排除了c。。。
SELECT a.uid
, a.city
, a.name
, b.jid
, b.details
FROM tableB b
JOIN tableA a
ON b.uid = a.uid
LEFT
JOIN tableC c
ON c.jid = b.jid
AND tableC.uid = 0
WHERE c.jid IS NULL;