从另一个SELECT *中排除一个表中的结果?

时间:2012-08-15 17:34:36

标签: mysql

  

可能重复:
  MySQL SELECT results from 1 table, but exclude results depending on another table?

我希望我不会问一些已经回答过的问题......没有看到一个。看似简单,但我无法让它发挥作用。

我有两张桌子:单位和租约。

我想要一个单位表中所有未结单位(建筑物和单位单位数)的列表,不包括租约表中在enddate字段中为空的那些单位。

表的结构(我删除了此示例不需要的其他字段:

CREATE  TABLE Unit(
    UnitKey     Int NOT NULL AUTO_INCREMENT,
    UnitNumber  Char(5) NOT NULL,
    BuildingKey Int     NOT NULL,
    CONSTRAINT   UNIT_PK    PRIMARY KEY(UnitKey),
    CONSTRAINT   UNIT_BLDG_FK     FOREIGN KEY(BuildingKey)
                    REFERENCES Building(BuildingKey));

CREATE  TABLE Lease(
    LeaseKey  Int                   NOT NULL AUTO_INCREMENT,
    UnitKey   Int                  NOT NULL,
    EndDate     Date                   NULL,
    CONSTRAINT LEASE_PK               PRIMARY KEY(LeaseKey),
    CONSTRAINT      LEASE_UNIT_FK   FOREIGN KEY(UnitKey) REFERENCES Unit(UnitKey));

1 个答案:

答案 0 :(得分:1)

试试这个:

select u.*
from units u
where not exists (select 1 from lease l where l.unitkey = u.unitkey and l.enddate is null)

在其他数据库引擎中,您将使用“not in”。但是,这在mysql中更好地优化。