konto usunięte

Temat: Sprytne SQL-ki

Witam

Jeś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ł
Marcin Miga

Marcin Miga Programista. Po
prostu programista.

Temat: Sprytne SQL-ki

SELECT
*
FROM
SKLEPY
WHERE
STOR_ID NOT IN
(
SELECT DISTINCT K.STOR_ID
FROM
(SELECT STOR_ID, TITLE_ID FROM TYTULY, SKLEPY) K
LEFT JOIN SPRZEDAZ S
ON
K.STOR_ID=S.STOR_ID AND K.TITLE_ID=S.TITLE_ID
WHERE S.STOR_ID IS NULL
)
Jacek Gużewski

Jacek Gużewski Architekt systemu

Temat: Sprytne SQL-ki

Nic dodać, nic ująć.

konto usunięte

Temat: Sprytne SQL-ki

Hmmm... nie spodziewałem się aż tak wielkiego odzewu tego posta :/
Wezmę 2 tygodnie urlopu, żeby nadrobić zaległości w czytaniu tego wątku ;)



Wyślij zaproszenie do