当一个字段不等于另一个字段时,带有条件的SQL查询

时间:2012-06-28 09:44:49

标签: mysql sql

假设我们有字段:id |内容| updateTime |创建时间

插入完成后,updateTime和creationTime都会填充当前时间。在更新时,仅更新updateTime字段。当我需要找到在'2012-06-28'上创建的所有数据时,我只需使用:

SELECT id, content FROM tbl WHERE creationTime LIKE '2012-06-28%'`

但要获取所有已更新的数据(不包括已创建的数据),我需要使用以下内容:

SELECT id, content FROM tbl WHERE creationTime LIKE '2012-06-28%' AND creationTime != updateTime

显然这不起作用。虽然我可以通过比较php中两个'时间'列的值来找到所有更新的数据,但我仍然喜欢在查询中进行。

UPD:嗯,事实证明我完全没有意识到sql不仅允许将字段的值与给定变量,数字进行比较......而且还可以将一个字段的值与另一个字段的值进行比较。

3 个答案:

答案 0 :(得分:6)

使用<>代替!=(与某些DMBS不兼容)

所以

SELECT id, content 
FROM tbl 
WHERE creationTime LIKE '2012-06-28%' AND creationTime <> updateTime

如果您需要一些文档you can find here

但是,您的查询必须与!=

一起正常运行

答案 1 :(得分:2)

您的查询是正确的(在mySQL¹上),不知道为什么会这样认为

¹<>是不等的SQL运算符。然而,它的一些实现(例如PostgreSQL或MySQL)也接受!=。如果您在不同的数据库上使用代码,请始终使用<>来避免出现问题。

答案 2 :(得分:1)

仅将not运算符从!=更改为<>

SELECT id, content FROM tbl WHERE creationTime LIKE '2012-06-28%' AND creationTime <> updateTime