我有一张table叫 users
具体如下:
现在,当我以以下方式运行查询时:
select * from users where name='admin1' AND 1;
我只得到 admin1
记录如下:
而查询为:
select * from users where name='admin1' OR 1;
我得到如下所示的所有记录作为输出:
我在试图理解为什么会发生这种事。如果我们讨论的是逻辑表达式的求值,那么上面的两个查询的求值结果都是1
1和1
以及
1或1
为什么会有这种差别呢?或者是我遗漏了什么基本的东西?
2条答案
按热度按时间g0czyy6m1#
很好用。第一个查询必须同时满足这两个条件,因此名称必须为“admin1”,并且1始终为true。这就是为什么只得到一行名为admin1的结果
在第二个查询中,只有一个条件必须满足,这就是为什么从表中获得所有结果的原因
vawmfj5a2#
只是为了补充@danopluana的答案,我认为这是正确的。
我强烈反对用这种方式编写查询,因为它们不符合sql标准,而且很难阅读。如果您对它们的含义感到困惑,我打赌下一个在您之后阅读它进行维护的开发人员也会感到困惑。这就产生了真正的生产缺陷,给你的客户带来了真正的损失。
只需编写正常的布尔条件,就可以让每个人的生活更轻松。