5

这可能是由于我的 SQL 知识有限,但我正在尝试使用如下语句获取数据:

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

据我了解,在这种情况下不会使用连接,因为两个查询都在同一个表上(尽管我对连接的了解非常有限)。我正在通过网络服务访问这个数据库,但我不确定它是什么类型的数据库。

有没有人知道如何在一个查询中从两个查询中获取值?

4

3 回答 3

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')
)
于 2013-03-07T17:58:04.377 回答
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'))
于 2013-03-07T18:01:35.843 回答
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 主机名。
于 2013-03-07T18:03:03.487 回答