代码之家  ›  专栏  ›  技术社区  ›  fearofawhackplanet

SQL server只返回单行或空值

  •  2
  • fearofawhackplanet  · 技术社区  · 15 年前

    我有一个SQL查询,我只想返回一行。如果有多行,我想返回null。

    我想我可以用这样的东西

    SELECT whatever FROM MyTable
     WHERE something = myQuery
       AND ( COUNT(SELECT whatever FROM MyTable
                 WHERE something = myQuery) = 1)
    

    但那是相当恶劣的,我想知道是否有一种更整洁的方式来做这件事。

    5 回复  |  直到 15 年前
        1
  •  4
  •   RPM1984    15 年前

    你做不到:

    SELECT whatever FROM
        (
           SELECT whatever, COUNT(*) As NumRecords
           FROM MyTable
           WHERE something = myQuery
           GROUP BY whatever
           HAVING NumRecords = 1
        )
    
        2
  •  1
  •   Oded    15 年前

    你可以用 IF 子句检查单行并仅在出现这种情况时选择:

    IF SELECT COUNT(*) FROM MyTable WHERE something = myQuery) = 1
      BEGIN
        SELECT whatever FROM MyTable
         WHERE something = myQuery
      END
    
        3
  •  1
  •   Pablo Santa Cruz    15 年前

    嗯,另一种方式可能是:

    select f1, f2, f3
      from your_table
     where f4 = f5*2
     group by f1, f2, f3
    having count(1) = 1
    

    但不知道它是否比你的解决方案更整洁。

        4
  •  0
  •   Neil    15 年前

    设置行数1

    在select语句之前。

    后来,

    设置行数0

        5
  •  0
  •   SHD    9 年前

    我们也可以这样加上,

    SELECT max(whatever) as whatever
    FROM MyTable
    WHERE something = myQuery
    HAVING  COUNT(*) = 1