2013-03-07 9 views
5

Đây có lẽ là do kiến ​​thức SQL hạn chế của tôi, nhưng tôi đang cố gắng để có được dữ liệu bằng một tuyên bố như thế này:Có thể thực hiện nhiều câu lệnh chọn SQL trong một truy vấn không? Cả hai câu chọn sẽ là trên cùng một bảng

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

Tôi nhận ra rằng có lẽ là một rất xấu tuyên bố, nhưng nó đã làm việc cho đến nay. Ban đầu tôi loại trừ các mục mà tên máy chủ không giống như "obl". Tôi có một câu hỏi như thế này:

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

Từ những gì tôi hiểu, tham gia sẽ không được sử dụng trong trường hợp này, vì cả hai truy vấn là trên cùng một bảng (mặc dù kiến ​​thức của tôi tham gia rất hạn chế). Tôi đang truy cập cơ sở dữ liệu này thông qua một webservice, và tôi không chắc đó là loại cơ sở dữ liệu gì.

Có ai có bất kỳ ý tưởng nào về cách tôi có thể nhận được các giá trị từ cả hai truy vấn trong một truy vấn không?

+0

Bạn mong đợi loại kết quả nào? –

Trả lời

8

Bạn nên sử dụng câu lệnh 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') 

Điều đó sẽ làm điều đó, nhưng tôi nghĩ bạn có thể suy nghĩ lại những điều kiện đó. Tôi sẽ suy nghĩ và chỉnh sửa nếu cần.

EDIT: Bạn có thể đạt được những gì bạn đang cố gắng với một truy vấn duy nhất, không cần liên minh.

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

bạn có thể sử dụng câu hỏi union hoặc OR để kết hợp hai câu lệnh này.

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

Bạn có thể kết hợp hai điều kiện WHERE chỉ bằng một, sử dụng OR để áp dụng cả hai điều kiện. Một cái gì đó như thế này:

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

Hai điểm:

  • Sử dụng chữ hoa cho chữ SQL làm cho dễ dàng hơn để đọc các truy vấn.
  • Có thể bạn sẽ phải sử dụng tên máy chủ SELECT DISTINCT nếu bạn muốn chắc chắn không nhận được cùng một tên lặp lại.