Query执行时没有错误,但不返回任何输出

时间:2017-08-19 16:52:37

标签: sql postgresql

我的查询在其中有一个子查询,但它没有返回输出,但实际上它必须提供一些输出,因为我手动检查并输出存在。我已经发布了下面的查询。

    select mac.mac_id,mac.mac1,mac.mac_type,record.soc_id
    from mso_charter.mac
    join record on mac.record_id = record.record_id
    where mac.mac_type='ethB' and record.soc_id IN (select soc from d); 

示例数据在

之下
    mac_id mac1   mac_type record_id--- for table mac
    1      6142   ethA       1 
    2      6412   ethB       1
    3      2313   ethC       1

    record_id soc_id ---- for table record
     1          Qu132
     1          as432
     1          342aq

    soc --- for table d
    a12w2
    23we
    qw12

mso_charter是模式名称mac,d和record是表名。

5 个答案:

答案 0 :(得分:0)

请注意,您的子查询实际上仍然是一个连接,可以这样写:

select mac.mac_id,mac.mac1,mac.mac_type,record.soc_id
  from mso_charter.mac
       join record using(record_id)
       join d on record.soc_id = d.soc
where mac.mac_type='ethB'; 

根据评论,我们仍然需要一个数据集来重现和帮助。

答案 1 :(得分:0)

您的record.soc_id都没有与d.soc_id的任何人匹配。所以你没有排。

另外,你写select soc from dsoc,而不是soc_id。错字或错误?

答案 2 :(得分:0)

应该从d中选择soc_id而不是选择select soc from d

答案 3 :(得分:0)

根据您的示例数据,d有一列soc_id。这应该用于比较:

select m.mac_id, m.mac1, m.mac_type, r.soc_id
from mso_charter.mac m join
     record r
     on m.record_id = r.record_id
where m.mac_type = 'ethB' and
      r.soc_id in (select d.soc_id from d); 

由于国际字符,隐藏字符,错误位置的空格等等,ids看起来可能相同但不一样。

如果这不起作用,请尝试以下方法:

  • 删除soc_id条件并查看是否有任何行符合第一个条件join
  • 如果仍然没有返回任何内容,请删除整个where子句以查看是否与join匹配。

答案 4 :(得分:0)

所以,感谢所有在这种情况下帮助我的人。我实际上犯了一个非常愚蠢的错误。我发布正确答案的原因可能是因为如果将来其他人陷入这样的问题或类似的事情,那么对他们有帮助。

    select m.mac_id,m.mac,m.mac_type,r.soc_id
    from mso_charter.mac m
    join mso_charter.record r on m.record_id = r.record_id
   where m.mac_type = 'ethB' and r.soc_id IN (select d.soc_id from d);

错误是我在执行连接时没有提到模式名称,并且在其他模式中有多个名为record的表,只是出于挫折我们往往会忘记让我花费几个小时来完成工作的小事情