代码之家  ›  专栏  ›  技术社区  ›  flx

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

  •  0
  • flx  · 技术社区  · 6 年前

    我知道我应该一个人解决,但我陷入了绝望

    谁借给了施密茨女士同样的书?打印出他们的姓氏

    你是 虽然


    这是我的尝试:

    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 回复  |  直到 6 年前
        1
  •  1
  •   Fahmi    6 年前

    你可以在下面试试-

    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'
    
        2
  •  1
  •   Zeljka    6 年前

    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'