Вопрос:
Пусть говорят, что у нас есть поля: id | содержание | updateTime | CreationTime
Когда вставка выполняется как 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 позволяет не только сравнивать значение поля с заданной переменной, число…, но также может сравнивать значение одного поля с другим.
Ответ №1
Используйте <> вместо != (Что несовместимо с некоторыми DMBS)
Так
SELECT id, content FROM tbl WHERE creationTime LIKE ‘2012-06-28%’ AND creationTime <> updateTime
Если вы хотите найти документацию, которую вы можете найти здесь
Однако ваш запрос должен работать правильно с !=
Ответ №2
Ваш запрос правильный (на mySQL¹), не знаю, почему вы думаете иначе
¹ <> – оператор SQL для не равных. Однако некоторые его реализации (PostgreSQL или MySQL, например) принимают != Тоже. Рекомендуется использовать <> чтобы избежать проблем, если вы когда-либо использовали свой код в другой базе данных.
Ответ №3
Измените оператор not только от != До <>
SELECT id, content FROM tbl WHERE creationTime LIKE ‘2012-06-28%’ AND creationTime <> updateTime