2013-03-07 11 views
5

aynı masada olurdu ama böyle bir açıklama kullanarak veri elde çalışılıyor:Bir sorguda birden çok SQL select deyimi yapmak mümkün mü? Hem seçme ifadeleri Bu muhtemelen benim sınırlı SQL bilgisine kaynaklanmaktadır

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%' 

ben muhtemelen çok kötü olduğunu fark ifade, ama şimdiye kadar çalıştı. Başlangıçta, ana makine adının "obl" gibi olmadığı girişleri hariç tutuyorum. Böyle başka bir sorgu var: hem sorgular aynı masada olduğundan (birleştirmeler bilgim çok sınırlı olsa da), bu durumda kullanılan olmaz katılır

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

, ne anlamak. Bu veritabanına bir web servisi aracılığıyla erişiyorum ve ne tür bir veritabanı olduğunu bilmiyorum.

Bir sorgudaki her iki sorgunun değerlerini nasıl alabileceğime dair herhangi bir fikri olan var mı?

+0

Ne tür bir çıktı bekliyorsunuz? –

cevap

8

Bir UNION deyimi kullanmalısınız.

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') 

Bunu yapacaklar, ama sanırım bu koşulları koşullarında yeniden düşünebilirsiniz. Bir düşünce vereceğim ve gerekirse düzenleyeceğim.

DÜZENLEME: Tek bir sorguda denediğiniz şeyi elde edebilirsiniz, sendikaya gerek yoktur.

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

bu iki ifadeleri birleştirmek union deyimi veya OR koşulunu kullanabilirsiniz.

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

İki WHERE koşulunu yalnızca biriyle birleştirerek, her ikisini de uygulamak için OR öğesini kullanabilirsiniz. Böyle bir şey:

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') 

İki nokta:

  • Kullanılması büyük harf SQL kelimeleri sorguları okumak için kolaylaştırır.
  • Belki de aynı olanı tekrarlamadığınızdan emin olmak için SELECT DISTINCT ana bilgisayar adını kullanmanız gerekecektir.