我有三个表,即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
但是现在如果我想要第三个tableC中没有的记录,在这种情况下是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 =用户protfolio.TableB =用户发布的工作.TableC =申请了哪些工作的用户(通过JID(JobIDs)识别)。现在一个用户可以申请对于许多工作。当用户申请工作时,会向第三个TABLEC输入一个条目,该条目记录了哪个用户申请了哪个工作。现在,我有应用工作的数据,我需要查询未应用的工作。
请你指导我哪里出错了。
答案 0 :(得分:1)
不应该是第一个查询...
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;