如何替换子查询与联接(或类似)

问题描述 投票:0回答:2

嗨,我目前正在通过一些考试为大学工作,我有点坚持与当前任务

我知道我应该解决独自但即时通讯卡和绝望

谁借给同一本书的施密茨女士做?打印出自己的姓氏

您不允许使用子查询尽管


这里是我的尝试:

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
mysql sql
2个回答
1
投票

你可以试试下面 -

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'

1
投票

如果使用的是左连接,如果没有关系,它会返回结果与空,所以你需要如果不为null添加条件

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'
© www.soinside.com 2019 - 2024. All rights reserved.