mysql查询返回错误的结果

时间:2013-10-28 14:41:16

标签: mysql sql

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

请你指导我哪里出错了。

1 个答案:

答案 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;
相关问题