2つのテーブルに参加したいです。1 つはユーザーを含み、もう 1 つの予定 - 予定テーブルには 3 つの列 (主キーである ApID)、bookFrom、bookedFor - これらの最後の 2 列はユーザー テーブルを参照します。詳細な表は次のとおりです。
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 サーバーのバージョンに対応するマニュアルを参照してください
なぜ 2 つの列が予約元と予約済みなのか不思議に思うかもしれません。その理由は、users テーブルには、ビジネス ユーザーと通常ユーザーの 2 種類のユーザーが存在するためです。そのため、ロジックは、ビジネスの予定を予約する通常ユーザーです。これが適切なデータベース設計であるかどうかはわかりませんが、は別の議論です