IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Adam Matis
Člen
Avatar
Adam Matis:24.11.2017 14:25

Ahoj potřeboval bych poradit. Potřebuji udělat dotaz nad jednou tabulkou, kde potřebuji vyfiltrovat všechny zaznamy z druhého dotazu. Myslel jsem, že když udělám except, tak dostanu v prvním dotazu jen záznamy které nejsou v tom druhém.

SELECT * FROM objednavka
except
SELECT * FROM objednavka WHERE cenaPolozky=0 OR KodObjednavky like 'Z%'
 
Odpovědět
24.11.2017 14:25
Avatar
Alexej Haman
Člen
Avatar
Alexej Haman:24.11.2017 14:40

Moc SQL nerozumím ale co použít něco jako

SELECT * FROM objednavka WHERE cenaPolozky!=0 OR KodObjednavky NOT LIKE  'Z%'
 
Nahoru Odpovědět
24.11.2017 14:40
Avatar
Adam Matis
Člen
Avatar
Odpovídá na Alexej Haman
Adam Matis:24.11.2017 15:05

Takovy dotaz už mě taky napadl, jenže toto vrátí všechny výsledky.

 
Nahoru Odpovědět
24.11.2017 15:05
Avatar
Alexej Haman
Člen
Avatar
Alexej Haman:24.11.2017 16:19

Tak v SQL se prý používá taky místo "!=" "<>"

SELECT * FROM objednavka WHERE cenaPolozky<>0 OR KodObjednavky NOT LIKE  'Z%'
SELECT * FROM objednavka WHERE cenaPolozky!="0" OR KodObjednavky NOT LIKE  'Z%'¨
SELECT * FROM objednavka WHERE cenaPolozky<>"0" OR KodObjednavky NOT LIKE  'Z%'

Zkus všechny tři :D

 
Nahoru Odpovědět
24.11.2017 16:19
Avatar
plelovsky
Člen
Avatar
plelovsky:26.11.2017 20:05
SELECT * FROM objednavka WHERE NOT (cenaPolozky = 0 OR KodObjednavky LIKE 'Z%')

nebo

SELECT * FROM objednavka WHERE cenaPolozky <> 0 AND KodObjednavky NOT LIKE 'Z%'
 
Nahoru Odpovědět
26.11.2017 20:05
Avatar
Ondřej Crha
Člen
Avatar
Ondřej Crha:27.11.2017 14:03
SELECT * FROM objednavka
WHERE Id not in (SELECT Id FROM objednavka WHERE cenaPolozky=0 OR KodObjednavky like 'Z%')

... bych napsal já :-D

 
Nahoru Odpovědět
27.11.2017 14:03
Avatar
Odpovídá na Ondřej Crha
Michal Štěpánek:28.11.2017 9:54

Dá se to tak napsat, ale v tomto případě mi to přijde zbytečné, když jde o dotaz v té samé tabulce... Takto bych to použil v případě, že by se podmínka týkala údajů v jiné tabulce. Tady stačí, jak psal plelovsky

SELECT * FROM objednavka WHERE NOT (cenaPolozky = 0 OR KodObjednavky LIKE 'Z%')
Nahoru Odpovědět
28.11.2017 9:54
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
plelovsky
Člen
Avatar
Odpovídá na Ondřej Crha
plelovsky:28.11.2017 16:20

Já ne, protože bych tím naprosto zbytečně degradoval výkon.
Samozřejmě záleží na databázi, indexech atd., ale složitější dotaz nemůže být efektivnější než jednodušší.

 
Nahoru Odpovědět
28.11.2017 16:20
Avatar
Ondřej Crha
Člen
Avatar
Ondřej Crha:30.11.2017 10:41

Pravda, pravda. Přiznávám.

(50063 row(s) affected)

 SQL Server Execution Times:
   CPU time = 313 ms,  elapsed time = 2153 ms.

(50063 row(s) affected)

 SQL Server Execution Times:
   CPU time = 250 ms,  elapsed time = 3743 ms.
 
Nahoru Odpovědět
30.11.2017 10:41
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 9 zpráv z 9.