1

我想加入 2 张桌子。一个包含用户,另一个包含约会 - 约会表包含 3 列(ApID,这是主键),bookFrom,bookedFor - 最后两列引用用户表,我认为很容易自我解释它们的意思。以下是详细的表格:

    CREATE TABLE `users` (
 `user_ID` int(11) NOT NULL AUTO_INCREMENT,
 `name` varchar(45) NOT NULL,
 `lastname` varchar(45) NOT NULL,
 `email` varchar(255) DEFAULT NULL,
 `password` varchar(100) DEFAULT NULL,
 `hash` varchar(32) DEFAULT NULL,
 `usertype` enum('1','2','3','4') DEFAULT NULL,
 PRIMARY KEY (`user_ID`),
 KEY `fk_users_usertype1_idx` (`usertype`),
 CONSTRAINT `fk_users_usertype1` FOREIGN KEY (`usertype`) REFERENCES `usertype` (`type_id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8

    CREATE TABLE `appointments` (
 `apID` int(11) NOT NULL AUTO_INCREMENT,
 `Bookfrom` int(11) ,
 `bookedfor` int(11) ,
 PRIMARY KEY (`apID`),
 KEY `fk_appointments_user1_idx` (`Bookfrom`),
 KEY `bokkedfor` (`bookedfor`),
 CONSTRAINT `appointments_ibfk_3` FOREIGN KEY (`bookedfor`) REFERENCES `users` (`user_ID`) ON DELETE CASCADE ON UPDATE CASCADE,
 CONSTRAINT `appointments_ibfk_2` FOREIGN KEY (`Bookfrom`) REFERENCES `users` (`user_ID`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8

我要查找的是是否在约会表中列出了特定用户(该用户的电子邮件为 papageorgiou40@testmail.com)(意味着已预约),并且我正在尝试使用以下语句执行此操作:

select  appointments.Bookfrom,appointments.Bookedfor 
from appointments,users 
where users.email='papageorgiou40@test.com' 
and appointments.Bookfrom=users.user_ID,
appointments.Bookedfor=users.user_ID;

但我收到以下消息:

错误代码 1064,SQL 状态 42000:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 4 行的“约会.Bookedfor=users.user_ID LIMIT 20 OFFSET 0”附近使用正确的语法

您可能想知道为什么 2 列bookedfrom 和bookedfor。原因是在 users 表中有 2 种类型的用户,业务用户和普通用户,所以逻辑是一个普通用户预约业务用户。我不确定这是适合这种场合的数据库设计,但是是不同的讨论

4

2 回答 2

0

我猜你想要一个OR在那里。或者你可以这样做:

... AND users.user_ID IN (appointments.Bookfrom,appointments.Bookedfor)
于 2013-09-05T11:23:06.110 回答
0

您在 where 子句中缺少一个运算符:

select  appointments.Bookfrom,appointments.Bookedfor 
from appointments,users 
where users.email='papageorgiou40@test.com' 
and appointments.Bookfrom=users.user_ID,
appointments.Bookedfor=users.user_ID;

试试这个:

select  appointments.Bookfrom,appointments.Bookedfor 
from appointments,users 
where users.email='papageorgiou40@test.com' 
and (appointments.Bookfrom=users.user_ID
or appointments.Bookedfor=users.user_ID);
于 2013-09-05T11:24:02.907 回答