【问题标题】:mysql join select min(date) and max (date) between two tablesmysql join select min(date) and max(date) 两个表之间
【发布时间】:2013-05-23 06:26:16
【问题描述】:

我的数据库中有两张表,一张用于场地,另一张用于预订。我需要的是一个查询来选择所有未预订的场地。见下文:

餐桌预订有以下字段:

  • bk_id

  • venue_id 作为(预订表)的外键

  • start_date (as date type ) //表示什么时候不会是场地

  • 可预订end_date(作为日期类型)//表示结束 预订日期,从这里开始,场地将是 可预订

场地表有以下字段:

  • venue_id 作为主键 等等。

我需要的是能够搜索所有未预订的场地。我应该如何设置我的mysql查询

【问题讨论】:

  • 完全没有预订或在特定日期范围内没有预订?
  • 您能以表格形式发布示例数据和所需的输出吗?

标签: mysql


【解决方案1】:

对于未在特定日期预订的场地使用

SELECT * FROM venue WHERE venue_id NOT IN (SELECT venue_id FROM booking WHERE {YOUR_DATE} BETWEEN  start_date AND end_date)

对于从未预订过的场地

SELECT * FROM venue WHERE venue_id NOT IN (SELECT venue_id FROM booking)

【讨论】:

  • 我尝试了第一个查询,我得到了 #1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取正确的语法,以便在 'end_date} BETWEEN 2013-04-01 AND 2013-04-30) LIMIT 0, 30' 在第 1 行使用 MY ORIGINAL QUERY WAS SELECT * FROM lvenue WHERE场地 ID 不在(从 2013 年 4 月 1 日和 2013 年 4 月 30 日之间的 {start_date,end_date} 预订中选择场地 ID)。
  • {YOUR_DATE} 与您尝试的不同,它就像您要查看场地预订的日期,例如'2013-04-01' BETWEEN start_date AND end_date
  • 问题是我的表单中有两个日期,起始日期是开始日期,结束日期是结束日期,我必须按照您的建议将它们传递到我的查询中 SELECT * FROM place WHERE场地 ID 不在(从预订中选择场地 ID '2013-04-01'、'2013-04-30' BETWEEN start_date AND end_date 仍然出现 sql 错误
  • 那就试试这个SELECT * FROM venue WHERE venue_id NOT IN (SELECT venue_id FROM booking WHERE (start_date BETWEEN '2013-04-01' AND '2013-04-30') OR (end_date BETWEEN '2013-04-01' AND '2013-04-30'))
猜你喜欢
  • 2020-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-18
  • 2017-05-19
  • 1970-01-01
  • 2020-11-01
  • 2017-12-07
相关资源
最近更新 更多