konto usunięte
Temat: Sprytne SQL-ki
WitamJeśli w swoim życiu ;) spotkałeś/aś się z rozwiązaniem jakiegoś problemu/zadania za pomocą SQL-ka w sposób nieoczywisty, wymagający pomyślenia lub po prostu sprytny - podziel się z nami swoją wiedzą :)
Na początek proponuję takie zadanie, na które się kiedyś natknąłem:
Zadanie:
Znajdź sklepy, którym udało się sprzedać każdy tytuł.
Założenia:
Rozwiązaniem ma być pojedyncza instrukcja SELECT. Nie można używać funkcji agregujących takich jak COUNT, nie można tworzyć tabel tymczasowych ani tym podobnych.
Relacje pomiędzy tabelami:
SPRZEDAŻ i SKLEPY łączy pole stor_id, SPRZEDAŻ i TYTUŁY łączy pole title_id.
Zeskryptowana struktura tabel (dla ułatwienia lub żeby można było też sparsować):
CREATE TABLE [dbo].[SPRZEDAZ] (
[stor_id] [char] (4) COLLATE Polish_CI_AS NOT NULL,
[ord_num] [varchar] (20) COLLATE Polish_CI_AS NOT NULL,
[ord_date] [datetime] NOT NULL,
[qty] [smallint] NOT NULL,
[payterms] [varchar] (12) COLLATE Polish_CI_AS NOT NULL,
[title_id] [varchar] (6) COLLATE Polish_CI_AS NOT NULL
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[SKLEPY] (
[stor_id] [char] (4) COLLATE Polish_CI_AS NOT NULL,
[stor_name] [varchar] (40) COLLATE Polish_CI_AS NULL,
[stor_address] [varchar] (40) COLLATE Polish_CI_AS NULL,
[city] [varchar] (20) COLLATE Polish_CI_AS NULL,
[state] [char] (2) COLLATE Polish_CI_AS NULL,
[zip] [char] (5) COLLATE Polish_CI_AS NULL
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[TYTULY] (
[title_id] [varchar] (6) COLLATE Polish_CI_AS NOT NULL,
[title] [varchar] (80) COLLATE Polish_CI_AS NOT NULL,
[type] [char] (12) COLLATE Polish_CI_AS NOT NULL,
[pub_id] [char] (4) COLLATE Polish_CI_AS NULL,
[price] [money] NULL,
[advance] [money] NULL,
[royalty] [int] NULL,
[ytd_sales] [int] NULL,
[notes] [varchar] (200) COLLATE Polish_CI_AS NULL,
[pubdate] [datetime] NOT NULL
) ON [PRIMARY]
GO
Rozwiązanie podam za kilka dni, jeśli będzie taka potrzeba (chociaż jestem przekonany że nie będzie).
Pozdrawiam
Paweł