我有三张桌子,即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;

10-06 05:17
查看更多