2013-03-07 52 views
5

这可能是由于我有限的SQL的知识,但我试图用这样的语句来获得数据:是否有可能在一个查询中执行多个SQL select语句?这两个SELECT语句将是对同桌

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

我意识到这可能是一个非常糟糕的声明,但它迄今奏效。在开始时,我排除了主机名不像“obl”的条目。我还有一个这样的查询:

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

据我了解,加入不会在这种情况下使用,因为这两个查询都在同一个表(尽管我的加入知识是非常有限的)。我通过web服务访问这个数据库,我不确定它是什么样的数据库。

有没有人有任何想法,我怎么能从一个查询中的两个查询中获取值?

+0

你期待什么样的输出? – 2013-03-07 18:01:34

回答

8

您应该使用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') 

这样做,但我认为你可以重新考虑那些条件。如有必要,我会给它一个想法和编辑。

编辑:你可以实现你正在试图用一个查询,不需要联合。

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

可以使用union语句或OR条件这两个语句结合起来。

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

您可以将两个WHERE条件合并为一个,使用OR来应用它们。事情是这样的:

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

两点:

  • 使用大写字母SQL词汇,更容易阅读的查询。
  • 也许你将不得不使用SELECT DISTINCT主机名,如果你想确定没有得到相同的重复。