【发布时间】:2022-11-15 15:43:44
【问题描述】:
在一张表中,我有这样的数据列
是否有可能进行查询以这种格式返回此数据:
_IDS_
71554
99188
69337
70534
73575
作为单独的 ID,然后我可以在查询中使用它
WHERE table.o_id NOT IN (_IDS_)
【问题讨论】:
-
WHERE !FIND_IN_SET(table.o_id, CSV_list) -
是否有可能进行查询以这种格式返回此数据是的。
标签: mysql
在一张表中,我有这样的数据列
是否有可能进行查询以这种格式返回此数据:
_IDS_
71554
99188
69337
70534
73575
作为单独的 ID,然后我可以在查询中使用它
WHERE table.o_id NOT IN (_IDS_)
【问题讨论】:
WHERE !FIND_IN_SET(table.o_id, CSV_list)
标签: mysql
做这样的事情:
Sélect * from table1 where id not in (sélect cast(strcol as int) from table2);
【讨论】:
不要以 CSV 格式存储值列表。对其进行规范化,每行存储一个值。
您可以使用 FIND_IN_SET() 函数针对 CSV 列表测试值。您需要在任何 CSV 列表中都不存在的测试值,因此使用 NOT EXISTS:
SELECT *
FROM data_table
WHERE NOT EXISTS ( SELECT NULL
FROM CSV_table
WHERE FIND_IN_SET(data_table.o_id, CSV_table.WebImages__images)
);
SELECT CSV_table.id, jsontable.WebImage_id
FROM CSV_table
CROSS JOIN JSON_TABLE( CONCAT('[', TRIM(BOTH ',' FROM CSV_table.WebImages__images), ']')
'$[*]' COLUMNS (WebImage_id INT PATH '$')
) jsontable
【讨论】:
这应该可以满足您的需求
SELECT * FROM demotbl2 where id not in (SELECT GROUP_CONCAT(TRIM(',' FROM WebImages__images)) FROM demotbl1);
GROUP_CONCAT() = 合并行,TRIM 删除第一个和最后一个 ,,这会破坏搜索到的数组
希望能帮助到你
这是概念证明的小提琴..:D .. Mysql DB Fiddle
【讨论】:
<>。什么也找不到。
id DESC - 将返回所有行。您错过了您测试的不是NOT IN ( 1,2,3 )(整数值列表)而是NOT IN ( '1,2,3' )(一个字符串值)。