создать утверждение со ссылкой на несколько таблиц - PullRequest
0 голосов
/ 09 мая 2020

Я пытаюсь написать ограничение для таблицы занятости, которое не допускает никакого значения выше значения из значения размера в таблице комнат для каждой комнаты с общим синтаксисом SQL. Я написал несколько кодов, но не смог заставить их работать. У меня ошибка: рядом с "ASSERTION": синтаксическая ошибка. Возможно ли такое ограничение?

Спасибо

Таблицы:

Patient
+------+-----------+-----------+   
| PIN  |first_name | last_name |
+------+-----------+-----------+
| P1234|      test | tuyt      |  
| P2234|      dasda| aktyl     | 
| P3234|      adx  | orlik     | 
| P4234|      hfg  | ewewan    | 
+------+-----------+-----------+

Room
+------------+------------+
|room_number | size       |
+------------+------------+
| 1          |      1     | 
| 2          |      2     |
| 3          |      3     | 
| 4          |      9     | 
+------------+------------+

Occupies
+----------+-------------+
|patient   | room number |
+----------+-------------+
| P1234    |      1      | 
| P2234    |      2      |
| P3234    |      3      | 
| P4234    |      9      | 
+----- ----+-------------+

SQL Код, который я пытался написать:

CREATE TABLE Room(room_number INT, size INT(8));
INSERT INTO Room values(1,1);
INSERT INTO Room values(2,2);
INSERT INTO Room values(3,2);
INSERT INTO Room values(4,9);

CREATE TABLE Patient(PIN CHAR(6), first_name VARCHAR(10), last_name VARCHAR(10),
                 PRIMARY KEY (PIN));
INSERT INTO Patient values('P1234', 'test','tuyt');
INSERT INTO Patient values('P2234', 'dasda','aktyl');
INSERT INTO Patient values('P3234', 'adx','orlik');
INSERT INTO Patient values('P4234', 'hfg','ewewan');



CREATE TABLE Occupies(patient char(6), room INT, PRIMARY KEY(patient,room),
                         FOREIGN KEY (patient)
                            REFERENCES Patient (PIN)
                         FOREIGN KEY (room)
                            REFERENCES Room (room_number));

INSERT INTO Occupies values('P1234', 1);
INSERT INTO Occupies values('P2234', 2);


CREATE ASSERTION Occupies CHECK 
( 
    NOT EXISTS 
    (
        SELECT *
        FROM Occupies as o
        WHERE 
        (
            (   SELECT count(o.patient)
                FROM Occupies As o  
                GROUP BY o.room) >
            (   SELECT r.size
                FROM Room as r
                GROUP BY r.room_number
                WHERE r.size)
        )
    )
);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...