【发布时间】:2013-11-07 09:33:15
【问题描述】:
我有三个表,分别是 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 和 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=用户发布的工作。TableC=用户申请了哪些工作(通过 JID(JobIDs)识别)。现在单个用户可以申请对于许多工作。每当用户申请工作时,都会在第三个 TABLEC 中输入一个条目,记录哪个用户申请了哪个工作。现在,我有申请工作的数据,我需要查询未申请的工作。
能否请您指导我到底哪里出错了。
【问题讨论】:
-
但是
JID = 3出现在第三个表中。你的意思是只返回JID = 2? -
Yes.return details with JID 1 and 2.Because 1 and 2 JID is not present in tableC against tableC.