Трудность создания операции деления между двумя таблицами - PullRequest
0 голосов
/ 23 февраля 2020
CREATE TABLE BARROW
(
    ID INT PRIMARY KEY,
    STUDENT_ID INT ,
    BOOK_ID INT,
)

INSERT INTO BARROW (ID,STUDENT_ID,BOOK_ID)VALUES (1,10010,00025)
INSERT INTO BARROW (ID,STUDENT_ID,BOOK_ID)VALUES (2,11094,00107)
INSERT INTO BARROW (ID,STUDENT_ID,BOOK_ID)VALUES (3,11094,00005)
INSERT INTO BARROW (ID,STUDENT_ID,BOOK_ID)VALUES (4,10121,00107)
INSERT INTO BARROW (ID,STUDENT_ID,BOOK_ID)VALUES (5,10020,00001)
INSERT INTO BARROW (ID,STUDENT_ID,BOOK_ID)VALUES (6,10020,00005)

CREATE TABLE BOOK
(
    ID INT PRIMARY KEY ,
    TITLE VARCHAR(100),
    AUTHOR VARCHAR(100),
    PUBLISHER VARCHAR(100),
    PUB_YEAR INT,
    ISBN_NO BIGINT,
)


INSERT INTO BOOK (ID,TITLE,AUTHOR,PUBLISHER,PUB_YEAR,ISBN_NO)VALUES (00001,'An Intoduction to Database Systems','A.k.Alien','McGrawHill',2001,74895841)
INSERT INTO BOOK (ID,TITLE,AUTHOR,PUBLISHER,PUB_YEAR,ISBN_NO)VALUES (00005,'An Intoduction to Relational Database','R.Torlone','Addison Wesley',2003,58663571)
INSERT INTO BOOK (ID,TITLE,AUTHOR,PUBLISHER,PUB_YEAR,ISBN_NO)VALUES (00025,'Prgramming with visual basic','N.B.Grag','Prentice Hall',1999,851447356)
INSERT INTO BOOK (ID,TITLE,AUTHOR,PUBLISHER,PUB_YEAR,ISBN_NO)VALUES (00107,'Mathematics For Engeenering','T.Date','Addison Wesley',2000,956482550)
INSERT INTO BOOK (ID,TITLE,AUTHOR,PUBLISHER,PUB_YEAR,ISBN_NO)VALUES (03567,'Fundamentals of Programming','W.L.Loure','Prentice Hall',2004,1551648)
INSERT INTO BOOK (ID,TITLE,AUTHOR,PUBLISHER,PUB_YEAR,ISBN_NO)VALUES (00267,'Engeenering Mathematics','W.C.Evans','Oxford',2005,4478568)
INSERT INTO BOOK (ID,TITLE,AUTHOR,PUBLISHER,PUB_YEAR,ISBN_NO)VALUES (00251,'Engeenering Mathematics','D.Woods','Prentice Hall',2003,79212655)

Это мои таблицы и значения, я хочу получить записи всех студентов student_ids, которые выпустили книги с именем издателя 'Addison Wesley'

Результат, который я хочу получить:

( studentID,bookID(Borrow)) ÷ ( (bookID)( id ( publisher = Addison Wesley (Book))))

Я хочу выполнить операцию деления между двумя таблицами и хочу получить из этого идентификаторы учеников:

SELECT STUDENT_ID, BOOK_ID 
FROM BARROW 

DIV

SELECT ID AS B 
FROM BOOK 
WHERE PUBLISHER = 'Addison Wesley'

Из этого изображения я хочу получить все идентификаторы учеников, выполнив операцию деления ...

image

1 Ответ

1 голос
/ 23 февраля 2020

То, что вы хотите - это JOIN, где мы подключаем каждого учащегося к изданным им книгам, а затем фильтруем его на основе поля PUBLISHER:

SELECT DISTINCT STUDENT_ID
FROM BARROW BA
JOIN BOOK BK ON BK.ID = BA.BOOK_ID
WHERE BK.PUBLISHER = 'Addison Wesley'

Вывод:

STUDENT_ID
11094
10121
10020

Демонстрация по SQLFiddle

Мы используем DISTINCT, чтобы избежать дублирования строк, когда один студент выпустил более одной книги, опубликованной Addison Wesley

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