1

我有三个表,即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中输入一个条目,记录哪个用户申请了哪个工作。现在,我有申请工作的数据,我需要查询未申请的工作。

请你指导我到底哪里出错了。

4

1 回答 1

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;
于 2013-10-28T15:05:06.523 回答