Frage zu einer Abfrage :)

DerHerrKarl

Neuer Benutzer
Beiträge
2
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:
Werbung:
Werbung:
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=*#
 
Zurück
Oben