【问题标题】:mysql query returns erroneous resultsmysql查询返回错误结果
【发布时间】: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.

标签: mysql sql


【解决方案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;

【讨论】:

  • 应该,但是第一个查询可以正常工作。这是 OP 质疑的第二个查询...
  • 是的 - 但是如果你正确地写出查询,那么整个事情就会变得简单得多......
  • 我想给出有效的查询。下次我发布问题时会记住。它有效。非常感谢:)
猜你喜欢
  • 2014-02-20
  • 2021-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-24
相关资源
最近更新 更多