Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Frage zu einer Abfrage :)

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von DerHerrKarl, 30 November 2016.

  1. DerHerrKarl

    DerHerrKarl Neuer Benutzer

    Hallo allerseits

    Ich übe gerade am Sql Server und bin auf eine Abfrage gestoßen, wo ich gerne wissen würde ob diese auch ohne Subquerrys gelöst werden kann:

    Eine kleine DB für eine Bücherei umfasst kunden, bücher, autoren, genres und verleih.
    Ich möchte nun die Bücher abfrage die im Moment nicht ausgeborgt sind, dies würde so funktionieren:

    Code:
    select  distinct b_id, b_name, a_vname+' '+a_nname as 'Autor', g_name as 'Genre'
    from buecher
    inner join autoren on a_id = b_a_id
    inner join genres on g_id = b_g_id
    left join verleih on b_id = v_b_id
    where b_id not in (select v_b_id from verleih where v_rueckgdat is null)
    order by b_id
    Gäbe es da eine Lösung nur mit joins?


    Hier create und insert befehle für meine kleine übungsdatenbank
    Code:
    create Database BiblioDB
    go
    use BiblioDB
    GO
    
    
    
    
    Create table autoren
    ( a_id int identity(1,1) primary key,
      a_vname varchar(30),
      a_nname varchar(30),
      a_herkunft varchar(30),
      a_gebdat date,
      a_sterdat date
    )
    
    create table genres
    ( g_id int identity(1,1) primary key,
      g_name varchar(40)  
    )
    
    create table kunden
    ( k_id int identity(1,1) primary key,
      k_vname varchar(30),
      k_nname varchar(30),
      k_gebdat varchar(30),
      k_anschrift varchar(200)
    )
    
    create table buecher
    ( b_id int identity(1,1) primary key,
      b_name varchar(100),
      b_sprache varchar(30),
      b_druckjahr decimal(4,0),
      b_erstverjahr decimal(4,0),
      b_a_id int,
      b_g_id int,
      foreign key (b_a_id) references autoren(a_id),
      foreign key (b_g_id) references genres(g_id)
    )
    
    create table verleih
    ( v_id int identity(1,1) primary key,
      v_k_id int,
      v_b_id int,
      v_ausbdat date,
      v_rueckgdat date,
      foreign key(v_k_id) references kunden(k_id),
      foreign key(v_b_id) references buecher(b_id)
    )
    
    go
    
    insert into kunden 
    Values  ('Luke','Skywalker', '01.01.1979','Planet Tatoonie'),
            ('Darth', 'Vader', '31.12.1957', 'Todestern'),
            ('Bruce','Wayne', '15.10.1967','Arkham city 666'),
            ('Satan', 'Der Teufel', '6.6.666', 'Hölle'),
            ('Peter','Pan', '24.12.1985','Nimmerland'),
            ('Robin','Hood', '12.6.1877','Sherwood forrest'),
            ('Peter','Parker', '30.7.1988','New York'),
            ('Axterix','Der Gallier', '1.1.1980','Gallien'),
            ('Daeneris','Targarian', '9.9.1999','Westeros'),
            ('Prinzssin','LeiLei', '5.5.1999','Planet Villach')
    
    insert into genres values ('Krimi'),('Fantasy'),('Sci-Fi'), ('Klassiker'), ('Fachbücher'), ('Kinderbücher'), ('Thriller'), ('Comic'), ('Biogrphien'), ('Erotik'), ('Humor'), ('Musik'), ('Roman')
    
    insert into autoren 
    values    ('Franz', 'Kafka', 'Österreich-Ungarn', '3.6.1883', '3.6.1924'),
            ('René','Goscinny','Frankreich','14.8.1926','5.11.1977'),
            ('Robert Anthony','Salvatore','USA','20.1.1959', NULL),
            ('John Ronald Reuel','Tolkien','England','3.1.1892','2.9.1973'),
            ('George Raymond Richard','Martin','USA','20.9.1948', NULL),
            ('Wolfgang','Hohlbein','Deutschland','15.8.1953', NULL),
            ('Astrid','Lindgren','Schweden','14.11.1907','28.01.2002'),
            ('Emil Erich','Kästner','Deutschland','23.2.1899','29.7.1974'),
            ('Thomas','Glavinic','Österreich','2.4.1972', NULL),
            ('Stephen','King','USA','21.9.1947',NULL),
            ('Stephen','Hawking','Großbritannien','8.1.1942',NULL),       
            ('Charlotte','Roche','Deutschland','18.3.1978', null),
            ('Hank','Moody','USA','17.4.1973', NULL),
            ('Thomas Conrad', 'Brezina', 'Österreich', '30.1.1963',NULL)
           
    insert into buecher 
    values    ('Der Hobbit','deutsch',2016,1937,4,6),
            ('Der Herr der Ringe I','deutsch',2000,1954,4,2),
            ('Der Herr der Ringe II','deutsch',2000,1955,4,2),
            ('Der Herr der Ringe III','deutsch',2000,1955,4,2),
            ('Wie man leben soll','deutsch',2006,2004,9,13),
            ('Der gesprungene Kristall','deutsch',1996,1991,3,2),
            ('Die verschlungenen Pfade','deutsch',1996,1991,3,2),
            ('Die silbernen Ströme','deutsch',1996,1992,3,2),
            ('Das Tal der Dunkelheit','deutsch',1996,1992,3,2),
            ('Die Verwandlung','deutsch',1995,1912,1,4),
            ('Asterix','deutsch',1986,1959,8,2),
            ('A Game of Thrones','englisch',1996,1996,5,2),
            ('A Clash of Kings','englisch',1998,1998,5,2),
            ('A Storm of Swords','englisch',2000,2000,5,2),
            ('A Feast for Crows','englisch',2005,2005,5,2),
            ('A Dance with Dragons','englisch',2011,2011,5,2),
            ('Die Prophezeiung','deutsch',1993,1993,6,2),
            ('Pippi in Taka-Tuka-Land','deutsch',2001,1948,7,6),
            ('Das fliegende Klassenzimmer','deutsch',1980,1933,8,6),
            ('In einer kleinen Stadt','deutsch',2003,1991,10,7),
            ('The Universe in a Nutshell','englisch',2001,2001,11,5),
            ('Feuchtgebiete','deutsch',2010,2008,12,11),
            ('God hates us all','englisch',2012,2012,13,13)
    
    
    insert into verleih
    values    (2,12,'1.1.2016','31.1.2016'),
            (3,7,'15.6.2012','11.12.2012'),
            (9,5,'12.10.2015','13.12.2015'),
            (1,18,'6.6.2016','8.8.2016'),
            (10,21,'12.9.2016','13.10.2016'),
            (3,3,'4.4.2016','8.7.2016'),
            (9,13,'1.1.2015','7.6.2015'),
            (5,13,'25.11.2016',null),
            (6,16,'19.11.2016',null),
            (6,20,'1.11.2016',null),
            (4,23,'27.11.2016',null),
            (3,7,'15.6.2013','11.12.2013'),
            (3,7,'15.6.2014','11.12.2014'),
            (9,5,'12.10.2011','13.12.2011'),
            (1,18,'6.6.2009','8.8.2009')
    
    
    

    Gruß Karl
     
    Zuletzt bearbeitet: 30 November 2016
  2. Chuky666

    Chuky666 Datenbank-Guru

    Moin moin,

    ein Fehler in deinem Script ich gefunden hab ;)

    Schau dir mal deine Definition der Tabelle Kunden an und dann dien Insert :)
     
  3. DerHerrKarl

    DerHerrKarl Neuer Benutzer

    Sry war zu voreilig(wie immer), sollte zuerst kontrollieren und dann posten :) ist aber schon ausgebessert :)
     
  4. akretschmer

    akretschmer Datenbank-Guru

    Geht. Minimalisierteres Beispiel und PostgreSQL (mit Range-Typen):

    Code:
    test=*# select * from kunden ;
     k_id |  name   
    ------+---------
      1 | kunde 1
      2 | kunde 2
    (2 Zeilen)
    
    test=*# select * from buecher ;
     b_id |  name  
    ------+--------
      1 | buch 1
      2 | buch 2
      3 | buch 3
    (3 Zeilen)
    
    test=*# select * from verleih;
     v_id | v_k_id | v_b_id |  zeitraum   
    ------+--------+--------+-------------------------
      1 |  1 |  1 | [2016-11-01,2016-11-20)
      2 |  1 |  2 | [2016-12-01,2016-12-20)
      3 |  1 |  3 | [2016-11-20,2016-12-10)
    (3 Zeilen)
    
    test=*# select * from buecher b left join verleih v on v.v_b_id=b.b_id where not zeitraum @> current_date;
     b_id |  name  | v_id | v_k_id | v_b_id |  zeitraum   
    ------+--------+------+--------+--------+-------------------------
      1 | buch 1 |  1 |  1 |  1 | [2016-11-01,2016-11-20)
      2 | buch 2 |  2 |  1 |  2 | [2016-12-01,2016-12-20)
    (2 Zeilen)
    
    test=*#
    
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden