Piotr Burant

Piotr Burant Student,
Politechnika Gdańska

Temat: Zapytanie SQL

Witam. Mam pary wartosci category_id, news_id. Chcialbym wswietlic wszystkie wpisy z tabeli, których wartosci tych pol nie sa rowne parom, ktore posiadam.

Przyklad:

majac takie pary: (category: 1, news 2); (category 2, news 2)

z tabeli:
category_id, news_id
1, 2
2, 2
1, 4
1, 3
2, 1
2, 3

otrzymam rekordy:
1,4
1,3
2,1
2,3

Prosze o pomoc w zbudowaniu zapytania SQL
Mariusz Przybylski

Mariusz Przybylski Dynamite Studio

Temat: Zapytanie SQL

Napisz na jakich tabelach działasz, bo nie jestem pewien czy dobrze to sobie wyobrażam

konto usunięte

Temat: Zapytanie SQL

SELECT * FROM test WHERE NOT (category_id IN (1, 2) AND news_id = 2);

albo jeżeli news_id nie zawsze będzie takie same:
SELECT * from test WHERE NOT (category_id = 1 AND news_id = 2 OR category_id = 2 and news_id = 2);
Mariusz Przybylski

Mariusz Przybylski Dynamite Studio

Temat: Zapytanie SQL

jak już to:

SELECT * FROM test WHERE (category_id, news_id) NOT IN ( (1, 2), (2,2));


pytanie tylko czy te pary też musisz skądś wyciągać?

konto usunięte

Temat: Zapytanie SQL

Mariusz P.:
jak już to:

SELECT * FROM test WHERE (category_id, news_id) NOT IN ( (1, 2), (2,2));


działa i tak i tak, ale fakt - nie jestem specem od SQLa ;)
pytanie tylko czy te pary też musisz skądś wyciągać?

w zapytaniu nic nie było o tym mowy, a ja we wróżkę bawić się nie zamierzam ;)
Mariusz Przybylski

Mariusz Przybylski Dynamite Studio

Temat: Zapytanie SQL

Piotr L.:
działa i tak i tak, ale fakt - nie jestem specem od SQLa ;)

to drugie zapytanie nie działa prawidłowo - zapomniałeś o nawiasach ;) poza tym oba Twoje zapytania komplikują się z każdą dodatkową parą do wykluczenia.
w zapytaniu nic nie było o tym mowy, a ja we wróżkę bawić się nie zamierzam ;)

w pytaniu był podany tylko przykład, więc nie traktowałbym tego jako faktyczny problem do rozwiązania. też wróżką nie jestem, dlatego wolę dopytać o szczegóły zamiast pisać rozwiązania, które nie pomogą autorowi wątku

konto usunięte

Temat: Zapytanie SQL

Mariusz P.:
Piotr L.:
działa i tak i tak, ale fakt - nie jestem specem od SQLa ;)

to drugie zapytanie nie działa prawidłowo - zapomniałeś o

Testowałem u siebie oba i SOA#1 (MySQL 5.7.2)
nawiasach ;) poza tym oba Twoje zapytania komplikują się z każdą dodatkową parą do wykluczenia.
>

Racja, moje zapytanie nie było "bulletproof", chociaż dla wspomnianej sytuacji zadziała.
w zapytaniu nic nie było o tym mowy, a ja we wróżkę bawić się nie zamierzam ;)

w pytaniu był podany tylko przykład, więc nie traktowałbym tego jako faktyczny problem do rozwiązania. też wróżką nie jestem, dlatego wolę dopytać o szczegóły zamiast pisać rozwiązania, które nie pomogą autorowi wątku

Jak wyżej: działać działa - choć jak wspomniałem już wcześniej specem od SQLa nie jest i na pewno da się to zrobić lepiej. W każdym razie przyznaję racje: Twoja wersja zapytania jest na pewno bardziej optymalna. Zdaje sobie sprawę, że w wielu sytuacjach "działa" nie będzie wystarczających stanem, ale tego nie będziemy obaj wiedzieć dopóki Piotr nie przedstawi swojego problemu w pełnym świetle. A jak powiedział ktoś mądrzejszy ode mnie "Premature optimization is like premature ejaculation" ;)Ten post został edytowany przez Autora dnia 09.12.13 o godzinie 16:29
Mariusz Przybylski

Mariusz Przybylski Dynamite Studio

Temat: Zapytanie SQL

Piotr L.:
Testowałem u siebie oba i SOA#1 (MySQL 5.7.2)

SELECT * from test WHERE NOT (category_id = 1 AND news_id = 2 OR category_id = 2 and news_id = 2); 


vs.

SELECT * from test WHERE NOT ((category_id = 1 AND news_id = 2) OR (category_id = 2 and news_id = 2));


widzisz różnicę?

konto usunięte

Temat: Zapytanie SQL

Mariusz P.:
Piotr L.:
Testowałem u siebie oba i SOA#1 (MySQL 5.7.2)

SELECT * from test WHERE NOT (category_id = 1 AND news_id = 2 OR category_id = 2 and news_id = 2); 


vs.

SELECT * from test WHERE NOT ((category_id = 1 AND news_id = 2) OR (category_id = 2 and news_id = 2));


widzisz różnicę?

Widzę. I wiem o co Ci chodzi. Co ciekawe, w obu przypadkach podaje mi ten sam wynik... Czemu?
Mariusz Przybylski

Mariusz Przybylski Dynamite Studio

Temat: Zapytanie SQL

Mój błąd, oba zapytania są sobie równe ze względu na wyższy priorytet operatora AND nad OR - nawiasy są niepotrzebne. Swoją drogą to nienawidzę offtopów, a tutaj sam jestem jego autorem :/

konto usunięte

Temat: Zapytanie SQL

Mariusz P.:
Mój błąd, oba zapytania są sobie równe ze względu na wyższy priorytet operatora AND nad OR - nawiasy są niepotrzebne. Swoją drogą to nienawidzę offtopów, a tutaj sam jestem jego autorem :/

Popatrz na to w ten sposób: na pewno kilka osób dowie się że AND i OR mają inne priorytety (w tym również ja, bo o tym nie wiedziałem) ;)
Ponadto, Twoje zapytanie:
SELECT * FROM test WHERE (category_id, news_id) NOT IN ( (1, 2), (2,2));

wygląda jednak lepiej (bardziej "PRO") od mojego ;)

Ergo: nie traktowałbym tego jako offtop. Wszak Piotr doczekał się rozwiązania (a nawet kilku wersji) ;)Ten post został edytowany przez Autora dnia 09.12.13 o godzinie 23:20

Następna dyskusja:

[sql] Zapytanie - join trze...




Wyślij zaproszenie do