对查询结果执行查询 MySQL

Perform a query over a query result MySQL

我想查询一个查询以找到不匹配的 ID。我有一个 ID 列表,我想要关于它们的所有信息,所以我做了一个简单的查询,例如:

SELECT * FROM table1 WHERE id IN(list_of_ids);

请注意“list_of_ids”是一个包含 274 个数字的列表,如下例(格式如 (number1, number2, number3)

+---------+   
|   id    |   
+---------+   
|  112234 |       
|  345657 |  
|   45332 |        
| 1234665 |     
|  213423 |  
+---------+

我输出了 151 行,所以有一些 ID 我不知道。我想看看哪些是这些 ID,只是为了进行质量检查,看看 query/typo 是否有错误,或者我真的没有关于这些的任何信息(我怀疑)。

我尝试了一些我在搜索时发现的方法,但其中 none 有效(如使用函数 VALUES 和创建临时 tables)

我知道我可以简单地用一个列和这个值创建一个新的 table,然后按照

行做一些事情
SELECT * id2 FROM table2 JOIN table1 WHERE id2 NOT LIKE id1";

(还没有测试过,但我想它可能有用)

但我觉得这是我以后会经常遇到的事情,所以我更喜欢用更直接的方式来做这件事,而不是每次都创建一个table。此外,我认为学习一种更直接的方法比创建和删除 tables 更适合这样的“简单”任务

有没有办法做类似

的事情
SELECT id2 FROM subquery JOIN table1 WHERE id2 != id1 FROM (SELECT * FROM table1 WHERE id IN (list_of_ids)) AS subquery;

我知道,这永远行不通,但只是为了说明我想要实现的目标。 对不起,我流了眼泪!

谢谢!

只需在第二部分使用带有 NOT INUNION 函数,如下所示:

SELECT * FROM table1 WHERE id IN(list_of_ids) UNION SELECT * FROM table1 WHERE id NOT IN(list_of_ids);

希望这就是你想要的。

以一种方式回答。

例如,表 1 如下所示:

create table table1 (id1 int);
insert into table1 values (12345),(112234),(345657),(213423),(223344);

table2 需要使用 WITH 子句进行递归调用(这是扩展到多行的常用方法)。 所以 list_of_ids 需要作为字符常量处理。

with recursive table2(id2,wk_ids) as (
  select cast(NULL as signed), '112234,345657,45332,1234665,213423' as list_of_ids
  union select
    cast(substring_index(wk_ids,',',1) as signed),
    substring(wk_ids,instr(wk_ids,',')+1)
    from table2 where wk_ids<>''
)
select id2 from table1 right outer join table2 on id1=id2 where id1 is null and id2 is not null;