Как заменить подзапрос объединениями (или аналогичными) - PullRequest
0 голосов
/ 05 февраля 2019

Привет, я сейчас прохожу экзамен для университета и вроде как застрял с текущей задачей

Я знаю, что должен решить это один, но я застрял и отчаялся

Кто одолжил ту же книгу, что и мисс Шмитц?Распечатайте их фамилии

Вам запрещено использовать подзапросы , хотя


Вот моя попытка:

SELECT l.Nachname
FROM Ausleihe as a
LEFT JOIN Leser as l on a.LeserOID = l.LeserOID
WHERE ExID IN (
  SELECT ExID
  FROM Ausleihe
         LEFT JOIN Leser L2 on Ausleihe.LeserOID = L2.LeserOID
  WHERE l2.Nachname = 'Schmitz'
);

это прекрасно работает, но с подзапросами.


Вот структура базы данных.Structure

**Buch -> Book**
BuchOID -> BookOID
Titel -> Title
Verfasser -> Author

**Vormerkung -> Reservartion**
LeserOID -> ReaderOID
BuchOID -> BookOID
VormDat -> Reservation date

**Leser -> Reader**
LeserOID -> ReaderOID
Nachname -> Last name
Mail

**Exemplar -> Copy**
BuchOID -> BookOID
ExID -> CopyID
AnschDat -> Date of aqusition

**Ausleihe -> Lending**
BuchOID -> BookOID
ExID -> CopyID
LeserOID -> ReaderOID
LNr -> *PK of this table*
ADat -> Lending date
RDat -> Return date

**Mahnung -> Reminder**
MahnungOID -> ReminderOID
LeserOID - > ReaderOID
BuchOID -> BookOID
ExID -> CopyID
Datum -> date
Betrag -> amount

Ответы [ 2 ]

0 голосов
/ 05 февраля 2019

если вы используете левое соединение, оно вернет результат с нулем, если нет отношения, поэтому вам нужно добавить условие, если не ноль

SELECT l.Nachname
FROM Ausleihe as a
LEFT JOIN Leser as l on a.LeserOID = l.LeserOID
LEFT JOIN Leser L2 on Ausleihe.LeserOID = L2.LeserOID
WHERE L2.Nachname is not null and L2.Nachname = 'Schmitz'

ИЛИ с внутренним соединением вы можете сделать что-то вроде этого

SELECT l.Nachname
FROM Ausleihe as a
LEFT JOIN Leser as l on a.LeserOID = l.LeserOID
INNER JOIN Leser L2 on (Ausleihe.LeserOID = L2.LeserOID AND and L2.Nachname = 'Schmitz')

или просто так

SELECT l.Nachname
FROM Ausleihe as a
LEFT JOIN Leser as l on a.LeserOID = l.LeserOID
INNER JOIN Leser L2 on Ausleihe.LeserOID = L2.LeserOID
WHERE L2.Nachname = 'Schmitz'
0 голосов
/ 05 февраля 2019

Вы можете попробовать ниже -

SELECT l.Nachname
FROM Ausleihe as a
LEFT JOIN Leser as l on a.LeserOID = l.LeserOID
JOIN Leser L2 on a.LeserOID = L2.LeserOID
   WHERE l2.Nachname = 'Schmitz'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...