konto usunięte

Temat: Niestandardowe zapytanie SQL

Witam!

Mam pytanie, program, którego używam daje możliwość tworzenia 'prostego' zapytania SQL w sekcji WHERE.

Można bez problemu sobie zrobić takie zapytanie

... WHERE x in (select x from TAB2 where ... )

Jak zrobić takie zapytanie dla dwóch warunków??

.. WHERE x, y in (select x, y from TAB2 where ... )

Dostaję błąd, że nie spodziewano się przecinka pomiędzy x a y :)

Jak napisać takie zapytanie?

Pozdrawiam!

Wojciech Gardziński

Wypowiedzi autora zostały ukryte. Pokaż autora

konto usunięte

Temat: Niestandardowe zapytanie SQL

Dzięki. & nie mogę użyć, a przy + wyskakuje mi błąd ORA-01722: niepoprawna liczba.

Jakby co, ten mądry program to IFS :)
Daniel Grabowski

Daniel Grabowski Interaktywne
planowanie produkcji
on-line z MES

Temat: Niestandardowe zapytanie SQL

Tak se ne da, ale tak:
WHERE x in (select x from TAB2 where ... ) and y in (select y from TAB2 where ... )

W przypadku kiedy równocześnie X i Y będą w tabeli.

Jeśli musi być spełnione X lub Y, to zapytanie powinno wyglądać tak:
WHERE x in (select x from TAB2 where ... ) or y in (select y from TAB2 where ... )


A tak w ogóle to w/w zapytanie może być nieoptymalne, ale bardzo dużo zależy od bazy danych. Jeśli to Oracle, to nie powinno być żadnego problemu ;-)

Wojciech Gardziński

Wypowiedzi autora zostały ukryte. Pokaż autora
Karol Kowalczyk

Karol Kowalczyk Programista, Marsh
Sp z o.o.

Temat: Niestandardowe zapytanie SQL

A może zrób konkatenacje(łączenie stringa):
dla mysql:
WHERE concat(x,'|', y) in (select concat(x,'|', y) from TAB2 where ... )
dla ms sql(sorka na szybko z pamieci- mogą byc błedy składniowe):
WHERE cast( x as varchar(100))+'|'+cast( y as varchar(100)) in (select cast( x as varchar(100))+'|'+cast( y as varchar(100)) from TAB2 where ... )
dla oracla(nigdy w tym nie pisałem):
WHERE x || '|' || y in (select x || '|' || y from TAB2 where ... )

albo zastosuj poprostu joina :

from tab1 join tab2 on (tab1.x=tab2.x and tab1.y=tab2.y)

Generalnie z inami miałem zawsze problem przy dużych ilosciach danych (nie w oraclu).

Możesz ew to w podzapytanie wrzucić lub założyc indeksy podwójne.

Możliwości jest wiele generalnie nie wiem po co Ci to. Jak raz wygenerować raport to konkatenacja powinna starczyć. Jeżeli to siakiś dataset to kombinuj z joinem.
Marcin Miga

Marcin Miga Programista. Po
prostu programista.

Temat: Niestandardowe zapytanie SQL

Jakie kombinacje...
WHERE (x,y) IN (SELECT x,y FROM ...)
EDIT: Ważne są nawiasy!Ten post został edytowany przez Autora dnia 28.05.14 o godzinie 15:01

konto usunięte

Temat: Niestandardowe zapytanie SQL

Sprawdzę jak dojadę do domu. Nie napisałem, ze baza to Oracle.
Daniel Grabowski

Daniel Grabowski Interaktywne
planowanie produkcji
on-line z MES

Temat: Niestandardowe zapytanie SQL

Mateusz K.:
Dzięki. & nie mogę użyć, a przy + wyskakuje mi błąd ORA-01722: niepoprawna liczba.

Jakby co, ten mądry program to IFS :)
Jakby co, to ten komunikat nie ma nic wspólnego z IFS - to jest błąd z bazy danych.
Daniel Grabowski

Daniel Grabowski Interaktywne
planowanie produkcji
on-line z MES

Temat: Niestandardowe zapytanie SQL

Wojciech G.:
Daniel G.:
Tak se ne da, ale tak:
WHERE x in (select x from TAB2 where ... ) and y in (select y from TAB2 where ... )

W przypadku kiedy równocześnie X i Y będą w tabeli.

Jeśli musi być spełnione X lub Y, to zapytanie powinno wyglądać tak:
WHERE x in (select x from TAB2 where ... ) or y in (select y from TAB2 where ... )


A tak w ogóle to w/w zapytanie może być nieoptymalne, ale bardzo dużo zależy od bazy danych. Jeśli to Oracle, to nie powinno być żadnego problemu ;-)
ee tam se ne da. operator konkatenacji u Larry'ego to ||
http://olowiak.com/IT/operatory-i-priorytety/

czyli
.. WHERE x||y in (select x||y from TAB2 where ... )
Chcesz sklejać stringi żeby zrobić coś takiego?
Masz świadomość czym to grozi?
Pierwsze z brzegu - wartość null w którymkolwiek polu (x lub y) lub inna kolejność wartości (x + y <> y + x) i to nie będzie działać poprawnie.
Dzięki za takie "rady"...
Daniel Grabowski

Daniel Grabowski Interaktywne
planowanie produkcji
on-line z MES

Temat: Niestandardowe zapytanie SQL

Marcin M.:
Jakie kombinacje...
WHERE (x,y) IN (SELECT x,y FROM ...)
EDIT: Ważne są nawiasy!
W jakiej bazie danych to zadziała?
Daniel Grabowski

Daniel Grabowski Interaktywne
planowanie produkcji
on-line z MES

Temat: Niestandardowe zapytanie SQL

Mateusz K.:
Sprawdzę jak dojadę do domu. Nie napisałem, ze baza to Oracle.
Ale błąd który pokazywałeś to ORACLE.
A więc jaka to baza danych?

konto usunięte

Temat: Niestandardowe zapytanie SQL

Daniel G.:
Marcin M.:
Jakie kombinacje...
WHERE (x,y) IN (SELECT x,y FROM ...)
EDIT: Ważne są nawiasy!
W jakiej bazie danych to zadziała?

W Postgresie działa.

konto usunięte

Temat: Niestandardowe zapytanie SQL

Wojciech G.:
Daniel G.:
Tak se ne da, ale tak:
WHERE x in (select x from TAB2 where ... ) and y in (select y from TAB2 where ... )

W przypadku kiedy równocześnie X i Y będą w tabeli.

Jeśli musi być spełnione X lub Y, to zapytanie powinno wyglądać tak:
WHERE x in (select x from TAB2 where ... ) or y in (select y from TAB2 where ... )


A tak w ogóle to w/w zapytanie może być nieoptymalne, ale bardzo dużo zależy od bazy danych. Jeśli to Oracle, to nie powinno być żadnego problemu ;-)
ee tam se ne da. operator konkatenacji u Larry'ego to ||
http://olowiak.com/IT/operatory-i-priorytety/

czyli
.. WHERE x||y in (select x||y from TAB2 where ... )

Dopiero to zadziałało :) Tylko jest jeden problem. Widzę po wyniku, że muszę dodać jeszcze do tego trzecią wartość, a już przy tych dwóch wynik dostaję w dwie minuty.

No cóż, zobaczymy, czy da się to zoptymalizować.

Dzięki wszystkim!

konto usunięte

Temat: Niestandardowe zapytanie SQL

Mateusz K.:
Wojciech G.:
Daniel G.:
Tak se ne da, ale tak:
WHERE x in (select x from TAB2 where ... ) and y in (select y from TAB2 where ... )

W przypadku kiedy równocześnie X i Y będą w tabeli.

Jeśli musi być spełnione X lub Y, to zapytanie powinno wyglądać tak:
WHERE x in (select x from TAB2 where ... ) or y in (select y from TAB2 where ... )


A tak w ogóle to w/w zapytanie może być nieoptymalne, ale bardzo dużo zależy od bazy danych. Jeśli to Oracle, to nie powinno być żadnego problemu ;-)
ee tam se ne da. operator konkatenacji u Larry'ego to ||
http://olowiak.com/IT/operatory-i-priorytety/

czyli
.. WHERE x||y in (select x||y from TAB2 where ... )

Dopiero to zadziałało :) Tylko jest jeden problem. Widzę po wyniku, że muszę dodać jeszcze do tego trzecią wartość, a już przy tych dwóch wynik dostaję w dwie minuty.

No cóż, zobaczymy, czy da się to zoptymalizować.

Dzięki wszystkim!

W ogólnym przypadku to jest bzdura.

Po pierwsze wydajnościowo to koszmar, bo trzeba złączyć kolumny w każdym wierszu.

Po drugie jak w jednej tabeli masz ('1', 22') a w drugiej ('12', '2') wtedy zapytanie taki wiersz zwróci, a nie powinno.

konto usunięte

Temat: Niestandardowe zapytanie SQL

To w takim razie jak powinno być dobrze?
Daniel Grabowski

Daniel Grabowski Interaktywne
planowanie produkcji
on-line z MES

Temat: Niestandardowe zapytanie SQL

Szymon G.:
/ciach/
W ogólnym przypadku to jest bzdura.
Niekoniecznie.
Po pierwsze wydajnościowo to koszmar, bo trzeba złączyć kolumny w każdym wierszu.
To zależy od bazy danych, optymalizator niektórych (np. MSSQL) może sobie z tym poradzić, ale zawsze trzeba z tym uważać...
Po drugie jak w jednej tabeli masz ('1', 22') a w drugiej ('12', '2') wtedy zapytanie taki wiersz zwróci, a nie powinno.
Ano, pisałem o tym...
Daniel Grabowski

Daniel Grabowski Interaktywne
planowanie produkcji
on-line z MES

Temat: Niestandardowe zapytanie SQL

Mateusz K.:
To w takim razie jak powinno być dobrze?
Napisałem Ci jak.
Lepszy były JOIN, ale jak w tym programie możesz tylko zmienić klauzulę WHERE, to zrób tak jak napisałem.
Daruj sobie sklejanie stringów (no offence, ale to domorosłe patenty...) - tu wiele zależy od jakości danych. A nie mam pojęcia ani o typach, ani o tym co de-facto w tej bazie jest (np. są null'e czy ich nie ma?).

Wojciech Gardziński

Wypowiedzi autora zostały ukryte. Pokaż autora
Daniel Grabowski

Daniel Grabowski Interaktywne
planowanie produkcji
on-line z MES

Temat: Niestandardowe zapytanie SQL

Szymon G.:
Daniel G.:
Marcin M.:
Jakie kombinacje...
WHERE (x,y) IN (SELECT x,y FROM ...)
EDIT: Ważne są nawiasy!
W jakiej bazie danych to zadziała?

W Postgresie działa.
Ciekawe... A przy takim zapisie jak podałeś, to jest odpowiednik AND czy OR?

Następna dyskusja:

[SQL] Zapytanie TSQL z wyko...




Wyślij zaproszenie do