Dzień dobry.
Chce porównać dwie subquerry po klauzuli WHERE a mianowicie:
Czy wszystkie wyniki jednego subquerry znajdują się gdziekolwiek w drugiej. (obie zwracają 1 kolumnę)
W jaki sposób skonstruować poprawnie takie zapytanie?
Dzień dobry.
Chce porównać dwie subquerry po klauzuli WHERE a mianowicie:
Czy wszystkie wyniki jednego subquerry znajdują się gdziekolwiek w drugiej. (obie zwracają 1 kolumnę)
W jaki sposób skonstruować poprawnie takie zapytanie?
Pisane "z palca", czyli mogą być błędy:
WITH where1(kolumna) AS (SELECT kolumna FROM <coś tam 1> WHERE <warunek 1>),
where2(kolumna) AS (SELECT kolumna FROM <coś tam 2> WHERE <warunek 2>)
join1(kolumna, gdzie) AS (SELECT kolumna, CASE (where2.kolumna IS NULL) THEN 1 ELSE 0 END AS gdzie FROM where1 LEFT JOIN where2 ON where1.kolumna = where2.kolumna)
SELECT kolumna,
CASE WHEN (join1.kolumna IS NULL) THEN -1 ELSE join1.gdzie END AS gdzie
FROM join1
RIGHT JOIN where2 ON join1.kolumna = where2.kolumna
i mamy 0, jeśli jest w obu, 1, jeśli w jednym i -1 jeśli w drugim
@Sadam2, po co tak utrudniać?
with
t1 as(select 1 x union select 3 union select 4),
t2 as(select 1 x union select 2 union select 4 union select 5)
select
coalesce(t1.x, t2.x),
t1.x,
t2.x
from
t1 full join t2
on t1.x=t2.x
Marcin.Miga napisał(a):
@Sadam2, po co tak utrudniać?
No sam nie wiem, po co. Żeby odpalić na serwerze 2005?
Sadam2 napisał(a):
Marcin.Miga napisał(a):
@Sadam2, po co tak utrudniać?
No sam nie wiem, po co. Żeby odpalić na serwerze 2005?
Tknęło mnie i sprawdziłem. Marcin, Twoje na 2k5 też działa. Dokumentacji nie poprawili, czy co.
Troche długie i pokrętne wasze rozwiązania ale dziękuje za pomoc
Pomogł mi następujący kod
NOT EXISTS
(
SELECT
[subquerry1_column]
FROM
[subquerry]
EXCEPT
SELECT
[subquerry2_column]
FROM
[subquerry2]
)
moje długie i pokrętne? Pierwszxe 3 linijki to utworzenie tabel z ktorych ma brac dane...
A twoje? NOT EXISTS z EXCEPT w podzapytaniu? Musisz mieć albo super maszynę, albo bardzo mało danych...