-5

可能重复:
来自 1 个表的 MySQL SELECT 结果,但根据另一个表排除结果?

我希望我不是在问已经回答的问题..没有看到。看起来很简单,但我无法让它工作。

我有两张桌子:Unit 和 Lease。

我想要从单元表中列出所有打开的单元(建筑物和单元单元号)的列表,不包括租赁表中 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));
4

1 回答 1

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 中优化得更好。

于 2012-08-15T17:37:57.550 回答