我有这样的疑问:
SELECT * FROM data WHERE ID IN(1,2,3);
我想知道是否有可能更改 IN 参数值以获取表中的所有行。比如:
SELECT * FROM data WHERE ID IN(LIKE %%);
SELECT * FROM data WHERE ID IN(ANY);
SELECT * FROM data WHERE ID IN(ALL);
etc.
我知道我所要做的就是删除“WHERE ID IN(..)”以获得我需要的内容,但这是更多的理论问题。
我考虑下一个方法:
SELECT * FROM data WHERE ID IN(SELECT ID FROM data);
这很愚蠢,但回答一下问题:)
您可以尝试反向查询。
SELECT * FROM data WHERE ID not IN(-1);
你不能让
in
做你想做的事。我建议您的查询使用第二个参数,该参数指示当前用户是否是管理员。然后,您可以将布尔值传递给此参数(0
或 1
):
SELECT * FROM data WHERE ID IN(%s) OR %s;
-- is admin (0 or 1) ^
所以,这就是我的解决方案。这种方式只能在
char
列中使用:
SELECT * FROM data WHERE ID IN(false);