mysql查询数值不在表中的sql语句

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql查询数值不在表中的sql语句相关的知识,希望对你有一定的参考价值。

比如我有一个数组,循环去数据库查询,根据id查询,数组里的id = 1,数据库的id= 1,突然我数组的id= 2在数据库里没有,就把数组里的id在数据库查不到的数据显示出来,sql语句怎么写啊

select id from table where id in(1,2,3,4);这段先查询到你数据库存在的id,

然后在程序里面过滤掉这些id,剩下的就是数据不存在的id
参考技术A SELECT *
FROM `t_table`
WHERE id NOT
IN ( 1, 6, 7 )
id用逗号隔开 家括号追问

这种方式不行的,比如我有1000个id,不同的只有20个,用你这种方法查询的话会查出980个结果

追答

select count(*) repeats,t_table.*

from t_table

group by `t_table.id

order by repeats desc

追问

我要的不是数量,而是那不同的20个id

追答

    t_table.*里没有id? 我就服了你了  智商是硬伤啊!

参考技术B select * from table where id not in XXX

追问

这样写是不行的,不信你试试

SQL如何查找不在表中的数据

【中文标题】SQL如何查找不在表中的数据【英文标题】:SQL How to find the Data which is not in table 【发布时间】:2016-03-02 19:37:07 【问题描述】:

我有这个选择语句,我想在结果集中显示找到和未找到... 我的查询只给了我数据库中存在的任何(值)。 如何也添加未找到。 示例:

5647994  1234 Data exist in table
5651061  8976 Data exist in table
5823683  null Data not exist in table
6115602  null Data not exist in table

SELECT *
FROM Carrier c
 WHERE (SUBSTRING(c.SrcFileName, 14, 7) in (
'5647994',
'5651061',
'5823683',
'6115602',
'6125795',
'6140114',
'6144781',
'6155133')

【问题讨论】:

您可以像使用IN 一样使用NOT IN。如果您使用的是JOIN,那么LEFT JOIN 将为您提供两者。我们需要查看您的表定义以及您的 SQL 是什么...is this Microsoft SQL Server 子查询的左外连接会帮助你 请阅读How-to-Ask 这里是START 了解如何提高问题质量并获得更好答案的好地方。 感谢您的快速回复。是的,下次我将按照如何操作。对于那个很抱歉。是的,我使用的是 Microsoft SQL Server,你能给我举个 Left Join 的例子吗? 【参考方案1】:

试试这个:

SELECT t1.val,  
       IF (t2.id IS NULL, 'NOT FOUND', 'FOUND'),
       t2.*
FROM (
  SELECT '5647994' AS val UNION ALL SELECT '5651061' UNION ALL
  SELECT '5823683' UNION ALL SELECT '6115602' UNION ALL 
  SELECT '6125795' UNION ALL SELECT '6140114' UNION ALL
  SELECT '6144781' UNION ALL SELECT '6155133') AS t1
LEFT JOIN Carrier AS t2 ON t1.val = SUBSTRING(t2.SrcFileName, 14, 7)

这个想法是创建一个包含所有要搜索的值的内联表。如果我们 LEFT JOIN 原始表到这个内联表,那么所有的值都会被返回。

上述查询假设idCarrier 表的一个字段。检查此字段中的NULL/NOT NULL 值分别标识未找到/找到的值。

【讨论】:

【参考方案2】:

根据其他信息更新。

If(OBJECT_ID('tempdb..#TempSrcFileName') Is Not Null)   Drop Table #TempSrcFileName

CREATE TABLE #TempSrcFileName
(
    src_file_name nchar(7)
)

INSERT INTO #TempSrcFileName (src_file_name)
VALUES
    ('5647994')
    , ('5651061')
    , ('5823683')
    , ('6115602')
    , ('6125795')
    , ('6140114')
    , ('6144781')
    , ('6155133')
;

SELECT
    t.src_file_name
    , 'Found' AS [Status]
FROM #TempSrcFileName t
    LEFT JOIN Carrier c ON SUBSTRING(c.SrcFileName, 14, 7) = t.src_file_name
WHERE   (SUBSTRING(c.SrcFileName, 14, 7) IS NOT NULL)
UNION SELECT
    t.src_file_name
    , 'Not Found' AS [Status]
FROM #TempSrcFileName t
    LEFT JOIN Carrier c ON SUBSTRING(c.SrcFileName, 14, 7) = t.src_file_name
WHERE   (SUBSTRING(c.SrcFileName, 14, 7) IS NULL)

【讨论】:

这似乎是显而易见的答案,但我认为它是错误的。第二部分将为您提供表中所有不在in 中的值,但 Samant 想检查in 中的值...很难用语言表达。 马拉卡,是的,你是对的。我要检查的值在给定集中。只有“5647994”、“5651061”、“5823683”、“6115602”、“6125795”、“6140114”、“6144781”、“6155133”。如果找到这些,则“找到”,否则“未找到”

以上是关于mysql查询数值不在表中的sql语句的主要内容,如果未能解决你的问题,请参考以下文章

用sql语句怎么查一个表的信息

mysql sql 语句

mysql查询语句例题

mysql sql语句两条合并成一条

mysql查询语句提示Unknown column 'zp' in 'where clause',求解!

MySQL 数据库 增删查改克隆外键 等操作