如何使用另一个查询结果过滤MySQL表
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用另一个查询结果过滤MySQL表相关的知识,希望对你有一定的参考价值。
我有两个表:
UserTable
id nama
-- -------------------
1 Administrator
11 Agung
21 Sagita
50 John
100 Purnama
可过滤表
id idlist
-- ------------------
1 1,21,100
2 21,50
所以我想从第二个表中查询带有ID的名称表
SELECT id, nama FROM UserTable
WHERE id IN (SELECT idlist FROM FilterTable WHERE id =1)
但是在mysql中,结果仅显示
id nama
------ ---------------
1 Administrator
虽然它应该显示UserTable中的至少3行
我认为这应该很容易,但是我已经尝试过搜索google和stackoverflow而没有解决方案,请教我如何获得所需的东西
这是一种简化,进一步的实现是为了保存访问者的搜索历史(表的ID)
答案
[如果使用字符串((SELECT idlist FROM FilterTable WHERE id =1)
子查询的结果)作为IN
表达式的输入,则不会获得期望的结果; MySQL将尝试将其转换为整数以匹配要测试的值(id
),从而导致1,21,100
被转换为1
且仅与Administrator
值匹配。相反,您应该使用FIND_IN_SET
进行比较:
FIND_IN_SET
或(使用子查询)
SELECT u.id, u.nama
FROM UserTable u
JOIN FilterTable f ON FIND_IN_SET(u.id, f.idlist)
WHERE f.id = 1
输出:
SELECT id, nama
FROM UserTable u
WHERE FIND_IN_SET(id, (SELECT idlist FROM FilterTable WHERE id =1))
id nama
1 Administrator
21 Sagita
100 Purnama
如果您的架构被正确规范化,您的生活会容易得多。请阅读:Demo on dbfiddle
以上是关于如何使用另一个查询结果过滤MySQL表的主要内容,如果未能解决你的问题,请参考以下文章
sql - 有没有办法过滤SELECT查询的结果,使用另一个SELECT查询?