2013-03-07 19 views
5

Jest to prawdopodobnie ze względu na mój brak znajomości SQL, ale jestem próby uzyskania danych za pomocą instrukcji tak:Czy można wykonać wiele instrukcji SQL w jednym zapytaniu? Oba SELECT będzie na tym samym stole

SELECT hostname 
FROM mytable 
WHERE hostname NOT LIKE '%obl%' 
    AND group NOT IN ('group1','group2','group3','group4','group5','group6','group7') 
    AND osname LIKE '%Windows%' 
    AND hostname NOT LIKE 'nic%' 

zdaję sobie sprawę, że jest to prawdopodobnie bardzo zły oświadczenie, ale do tej pory zadziałało. Na początku wykluczam wpisy, w których nazwa hosta nie jest podobna do "obl". Mam jeszcze jedno zapytanie tak:

SELECT hostname 
FROM mytable 
WHERE hostname LIKE '%obl%' 
    AND group IN ('group9','group0') 

Z tego co rozumiem, dołącza nie zostaną wykorzystane w tym przypadku, ponieważ oba pytania są na tej samej tabeli (chociaż moja wiedza złączeń jest bardzo ograniczona). Uzyskuję dostęp do tej bazy danych za pośrednictwem usługi sieciowej i nie jestem pewien, jaka to baza danych.

Czy ktoś ma pomysły na to, w jaki sposób mogę uzyskać wartości z obu zapytań w jednym zapytaniu?

+0

Jakiej mocy wyjściowej można się spodziewać? –

Odpowiedz

8

Powinieneś użyć instrukcji UNION.

SELECT hostname FROM mytable 
WHERE hostname 
    NOT LIKE '%obl%' AND 
    group NOT IN ('group1','group2','group3','group4','group5','group6','group7') 
    AND osname LIKE '%Windows%' 
    AND hostname not LIKE 'nic%' 

UNION 

SELECT hostname FROM mytable 
WHERE hostname 
    LIKE '%obl%' 
    AND group in ('group9','group0') 

To wystarczy, ale myślę, że można przemyśleć te warunki. Dam ci to do myślenia i edytuję, jeśli to konieczne.

EDYCJA: Możesz osiągnąć to, co próbujesz za pomocą pojedynczego zapytania, bez związku.

SELECT hostname FROM mytable 
WHERE (
    hostname NOT LIKE '%obl%' 
    AND group NOT IN ('group1','group2','group3','group4','group5','group6','group7') 
    AND osname LIKE '%Windows%' 
    AND hostname NOT LIKE 'nic%' 
) 
OR (
    hostname LIKE '%obl%' 
    AND group IN ('group9','group0') 
) 
0

można użyć union oświadczenie lub OR warunek, aby połączyć te dwa oświadczenia.

select hostname from mytable where (hostname not like '%obl%' and group not in ('group1','group2','group3','group4','group5','group6','group7') and osname like '%Windows%' and hostname not like 'nic%') 
OR 
(hostname like '%obl%' and group in ('group9','group0')) 
0

Możesz połączyć dwa warunki WHERE w jednym, używając OR, aby zastosować oba. Coś takiego:

SELECT hostname FROM mytable WHERE 
(hostname NOT LIKE '%obl%' AND group NOT IN ('group1','group2','group3','group4','group5','group6','group7') AND osname LIKE '%Windows%' AND hostname NOT LIKE 'nic%') 
OR 
(hostname LIKE '%obl%' AND group IN ('group9','group0') 

dwa punkty:

  • Korzystanie wielkie dla SQL słowy ułatwia czytać zapytań.
  • Być może będziesz musiał użyć nazwy hosta SELECT DISTINCT, jeśli chcesz mieć pewność, że nie powtórzysz tego samego.
Powiązane problemy