2013-04-26 30 views
0

您使用哪种连接从父表和子表中选择数据,其中父表中可能不包含子数据?Simple/ish命令

+0

什么where子句

select * from propertys where propertys.propertyID not in (select propertyID from lease); 
  • 或者您可以使用左连接是你的问题吗?你有尝试过什么吗? – 2013-04-26 21:32:50

  • +0

    我对此表示赞赏,因为尽管它的措辞很糟糕,但这是所有SQL中最常见的问题之一。 – Jasmine 2013-04-26 21:36:28

    +0

    我知道我很挑剔,但财产的复数属性:-) – mickfold 2013-04-26 21:40:23

    回答

    1

    我觉得你的问题是更恰当表述为这样:

    如何找到在主表中的项目不具有在子表中的任何项目?

    这是SQL一个很常见的问题,并且有一个已知的解决方案......这部作品在T-SQL(你需要总是说,你使用的是什么)

    select m.master_data, c.child_data 
    from master_table m 
    left outer join child_table c 
        on m.ID = c.ID 
    where c.child_data IS NULL 
    

    当子表中没有任何内容,OUTER联接会在子表列中产生空值,因此您只需在子表中显示带有空值的行,就是这样。您不会在结果中显示子表中的任何列。

    +0

    谢谢你! – Emma 2013-04-26 21:47:18

    +0

    这与你接受的答案是一样的,期望我提供了解释。那么下面的人也是如此。就像我说的那样,这是一个众所周知的解决方案。 – Jasmine 2013-04-26 22:14:57

    +0

    对不起,不知道如何工作的网站呢!,接受你的和感谢您的帮助 – Emma 2013-04-26 22:33:40

    0
    SELECT 
    p.* 
    FROM 
    Property p 
    LEFT JOIN Lease l ON p.propertyid = l.propertyid 
    WHERE l.propertyid IS NULL 
    
    +0

    谢谢我已经给了几个不同的解决方案,并给他们所有的前!谢谢你,非常感谢, – Emma 2013-04-26 21:53:06

    1

    有几种方法可以找到没有租约的房产。

    1. 使用子查询提供了在空检查where子句

      select * 
      from propertys 
      left join lease on lease.propertyID = propertys.propertysID 
      where lease.leaseID is null; 
      
    +0

    试过第二个&它的作品!非常感谢! – Emma 2013-04-26 21:52:17

    +0

    很高兴我能帮到你! – mickfold 2013-04-26 21:53:54