首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL:从表中选择all,其中关联表没有指定的字段值

SQL:从表中选择all,其中关联表没有指定的字段值
EN

Stack Overflow用户
提问于 2014-05-09 17:14:58
回答 4查看 189关注 0票数 1

我有一个数据库,有一张场地和预订的桌子。我们的关系是1:M,我想选择所有的场地,在一个特定的日期没有预订。日期字段名为booking_date,出现在订票表中。我不是SQL中最强的,但我发现不存在,但这似乎给了我没有场地或所有场地,这取决于日期是否只出现在一个booking_date字段中。

总之,我需要的是一个查询:选择所有的场馆,没有booking_date字段=?

地点表: id、int name、string其他不重要的字段

预订表: id、int customer_id、int venue_id、int booking_date、date

所以场地属于预订。我想要所有没有预订的场地,booking_date字段等于指定的日期。

例如,如果我有5个场地,其中一个在2014-06-09年预订,而我提供了那个日期,我想要其他4个场地,在这一天没有预订。

如果有人感兴趣,这是用来显示的地点,在一个特定的日期,用户指定。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-05-09 17:19:32

NOT EXISTS听起来正是您所需要的:

代码语言:javascript
复制
SELECT *
FROM Venues V
WHERE NOT EXISTS(SELECT 1 FROM bookings
                 WHERE booking_date = 'SomeDate'
                 AND venue_id = V.venue_id)
票数 1
EN

Stack Overflow用户

发布于 2014-05-09 17:21:05

我会在这里处理这个问题(在你的桌子上做一些假设):

代码语言:javascript
复制
DECLARE @DateCheck date = '2014-05-09';

SELECT
    *
FROM
    Venues
WHERE
    VenueId NOT IN
        (
        SELECT
            VenueId
        FROM
            Bookings
        WHERE
            BookingDate = @DateCheck
        );
票数 1
EN

Stack Overflow用户

发布于 2014-05-09 17:22:01

检查以下查询

代码语言:javascript
复制
    select v.* from
    tbl_venues v
    left join tbl_bookings b on v.VenueID=b.VenueID and b.booking_date ='2014-05-02'
    where b.bookingID is null

其中bookingID:预订表的主列,venueID:场馆表的主列

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23570443

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档