SQL - 查询 - 不在select中

时间:2014-06-26 11:00:21

标签: sql sql-server-2008

好的,这是我的SQL: -

SELECT Telephone, 
       Houseno, 
       Street, 
       Tostreet, 
       Passengername, 
       Acceptancedate 
FROM   Telephone 
WHERE  Acceptancedate !> '2014/05/01' 
       AND Telephone LIKE '011%' 
       AND ( Zoneno = '6' 
              OR Zoneno = '5' 
              OR Zoneno = '9' 
              OR Zoneno = '108' ) 
       AND Telephone = 'XXX' 
ORDER  BY Acceptancedate 

显示此电话号码的5条记录。

但是,如果我将!>更改为>

显示3条记录。

我所拥有的SQL是正确的,但我只想显示数字,如果这个电话号码在AcceptanceDate > '2014/05/01'时没有显示(因为电话号码不是唯一的)

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:1)

您可以使用NOT EXISTS排除在特定日期之后出现的电话号码

SELECT  Telephone, 
        Houseno, 
        Street, 
        Tostreet, 
        Passengername, 
        Acceptancedate 
FROM    Telephone AS t
WHERE   Telephone LIKE '011%' 
AND     Zoneno IN ('6', '5', '9', '108')
AND     Telephone = 'XXX' 
AND     NOT EXISTS
        (   SELECT  1
            FROM    Telephone AS t2
            WHERE   t2.Telephone = t.Telephone
            AND     t2.Acceptancedate > '20140501' 
        );

答案 1 :(得分:0)

您应该像这样编写where子句:

WHERE  Acceptancedate <= '2014-05-01' AND
       Telephone LIKE '011%' AND
       Zoneno IN ('6', '5', '9', '108') AND
       Telephone = 'XXX' 

这不会改变结果,但以下是更改:

  • !<不是标准比较运算符。使用更清晰的<=
  • 我将日期格式更改为ISO标准YYYY-MM-DD格式
  • 我将ZoneNo的比较更改为使用IN而不是OR

另外,我注意到Telephone上的两个比较。第一个是多余的。