SQL查询排除值

时间:2014-04-13 16:27:44

标签: sql

我有一个查询要在其中排除特定值(在此示例中为“Mat”)

查询工作正常,没有子查询:

SELECT test.SAME , test.Nationality, test.Name, coalesce(test2.Job,'')jobb
  FROM test
  LEFT JOIN test2
  ON test.noID=test2.noID
  WHERE test.SAME = 555 and test.Name NOT IN (
                                              SELECT *
                                              FROM test
                                              WHERE test.NAME = "Mat"
                                              )
  group by SAME , name
  order by same desc  

此处示例:

http://www.sqlfiddle.com/#!2/1f1fb/28

4 个答案:

答案 0 :(得分:0)

如果您想将确切的名称与 Mat

匹配,则可以执行此操作
SELECT test.SAME , test.Nationality, test.Name, coalesce(test2.Job,'')jobb
  FROM test
  LEFT JOIN test2
  ON test.noID=test2.noID
  WHERE test.SAME = 555 and test.Name != "Mat"

group by SAME , name
  order by same desc 

如果你想要排除所有包含 Mat 的内容,那么:

SELECT test.SAME , test.Nationality, test.Name, coalesce(test2.Job,'')jobb
      FROM test
      LEFT JOIN test2
      ON test.noID=test2.noID
      WHERE test.SAME = 555 and test.Name NOT LIKE '%Mat%'

    group by SAME , name
      order by same desc 

如果您想要排除以 Mat 开头,那么:

SELECT test.SAME , test.Nationality, test.Name, coalesce(test2.Job,'')jobb
          FROM test
          LEFT JOIN test2
          ON test.noID=test2.noID
          WHERE test.SAME = 555 and test.Name NOT LIKE 'Mat%'

        group by SAME , name
          order by same desc 

答案 1 :(得分:0)

您可以使用NOT LIKE statement

SELECT test.SAME , test.Nationality, test.Name, coalesce(test2.Job,'')jobb
  FROM test
  LEFT JOIN test2
  ON test.noID=test2.noID
  WHERE test.SAME = 555 and test.Name not like 'Mat'
  group by SAME , name
  order by same desc

SQLFiddle

<>!= operator

SELECT test.SAME , test.Nationality, test.Name, coalesce(test2.Job,'')jobb
  FROM test
  LEFT JOIN test2
  ON test.noID=test2.noID
  WHERE test.SAME = 555 and test.Name <> 'Mat'
  group by SAME , name
  order by same desc

SQLFiddle

答案 2 :(得分:0)

您的查询应该是: -

SELECT test.SAME , test.Nationality, test.Name, coalesce(test2.Job,'')jobb
  FROM test
  LEFT JOIN test2
  ON test.noID=test2.noID
  WHERE test.SAME = 555 and test.Name NOT IN (
                                          SELECT NAME
                                          FROM test
                                          WHERE test.NAME = "Mat"
                                          )
  group by SAME , name
  order by same desc

答案 3 :(得分:0)

子查询将无效,因为您在子查询中给出了select *,但在外部查询中,您只有一列要匹配,即test.Name。如果您将子查询放入(SELECT test.Name FROM test WHERE test.NAME =&#34; Mat&#34;)那么整个查询就可以了。但顺便说一句,这里不需要子查询来获得你想要的结果。