Mysql 如何从第三个表中不存在的两个表中获取所有记录
我正在寻找一种方法来显示今天取消预订的用户列表 当用户取消预订时,我的系统的工作方式是在取消表中添加一条记录,然后从预订表中删除该记录 目前我有Mysql 如何从第三个表中不存在的两个表中获取所有记录,mysql,sql,Mysql,Sql,我正在寻找一种方法来显示今天取消预订的用户列表 当用户取消预订时,我的系统的工作方式是在取消表中添加一条记录,然后从预订表中删除该记录 目前我有 select distinct members.firstname, members.lastname, cancelations.time, cancelations.groupnumber from members inner join cancelations on members.memberid = cancelations.membe
select distinct
members.firstname, members.lastname, cancelations.time, cancelations.groupnumber
from
members inner join cancelations on members.memberid = cancelations.memberid
where
cancelations.date = "CURRENT_DATE"
这可以很好地工作,除了,这还会显示用户是否将约会推迟/提前,因为系统将取消约会,然后重新预订
所以我相信我需要的是:
从cancelations.date=当前_日期且用户今天在bookings表中没有任何记录的表中选择不同的列名
使用中的表格简化
成员-成员ID、名字、姓氏
取消-取消ID、成员ID、日期、时间、组号
bookings-bookingid、memberid、日期、时间、组号所以使用NOT EXISTS,这正是您想要的:
select distinct members.firstname, members.lastname, cancelations.time, cancelations.groupnumber
from members
inner join cancelations
on members.memberid = cancelations.memberid
where cancelations.date = "CURRENT_DATE"
AND NOT EXISTS(SELECT 1 FROM bookings b
WHERE DATE(b.dateField) = DATE(cancelations.date)
AND b.memberid = member.memberid)
这将检查预订表中是否不存在同一成员当天的记录我将通过更改预订表的表结构来实现这一点。我不想在多个表中存储取消状态,而只想在bookings中添加一个名为isActive的新列。创建预订时,此列将设置为1;删除预订时,此列将设置为0。此外,当恢复预订时,它将设置为1。这是一种常见的技术,称为软删除。它允许您在逻辑上删除一条记录,而无需实际将其删除或移动到另一个表中。稍后,您可以将过时的已删除预订归档到另一个表中 以下是表格结构:
CREATE TABLE bookings (`id` int PRIMARY KEY,
`memberid` int,
`isActive` tinyint
`date` datetime);
现在,查询用户是否从今天起没有任何预订是明智而直接的:
SELECT COUNT(*)
FROM bookings
WHERE memberid = 1 AND
date = CURDATE() AND
isActive = 1
@sagi给出的查询看起来很有希望,但当你发现自己编写复杂的查询来回答简单的业务问题时,考虑一下架构可能会有所收获。如果重新预订的约会是明天的,那该怎么办?客户会将其归类为取消,尽管这一点很好!您好,Sagi,我已在b.datefield和member[s]中替换了正确的列。memberid但是这不起作用,当条件为true和falsefixed时,它只会导致没有结果,并选择了不同的成员。firstname,members.lastname,cancelations.time,cancelations.groupnumber来自成员内部加入成员的取消。memberid=cancelations.memberid其中cancelations.date=当前\日期且不存在从预订b中选择*,其中b.date=当前\日期,b.memberid=members.memberid