programing

쿼리 "not equal"이(가) 작동하지 않습니다.

powerit 2023. 9. 10. 13:11
반응형

쿼리 "not equal"이(가) 작동하지 않습니다.

다음과 같은 매우 간단한 질문이 있습니다.

SELECT * FROM `all_conversations` WHERE `deleted_1` != '1';

그리고 나의deleted_1기본적으로null또는 어떤 사용자 id. 하지만 어떤 이유에서인지 이 쿼리는 항상 나에게 0개의 행을 반환합니다. 또한 나는 시도해 보았습니다.<>뭐가 잘못됐을까요?

EDTI 그래서 더 많은 쿼리를 실행한 후에 내 문제가 기본값이라는 것을 알게 되었습니다.deleted_1야전이었다NULL그래서 쿼리를 수정했는데 이제는 잘 작동합니다.

SELECT *
FROM `all_conversations`
WHERE `deleted_1` != 'NULL'
AND `deleted_1` != 23
SELECT * FROM all_conversations WHERE deleted_1 <> 1 OR deleted_1 IS NULL

NULL 값은 특별한 처리가 필요합니다. http://dev.mysql.com/doc/refman/5.1/en/working-with-null.html

다이아몬드 연산자를 사용하는 것을 제안합니다.<>에 찬성하여!=첫번째는 유효한 SQL이고 두번째는 MySQL 추가입니다.

NULL-safe 연산자 및 negative를 사용하는 것이 좋습니다.

SELECT * FROM `all_conversations` WHERE NOT(`deleted_1` <=> '1');

이것을 시도해 볼 수 있습니까?deleted_1 is not null and deleted_1 != '1'?

mysql> select 0 is not null and 0 != '1', 1 is not null and 1 != '1', null is not null and null != '1';
+----------------------------+----------------------------+----------------------------------+
| 0 is not null and 0 != '1' | 1 is not null and 1 != '1' | null is not null and null != '1' |
+----------------------------+----------------------------+----------------------------------+
|                          1 |                          0 |                                0 |
+----------------------------+----------------------------+----------------------------------+

아니면 이거.deleted_1 is null or deleted_1 != '1':

mysql> select 0 is null or 0 != '1', 1 is null or 1 != '1', null is null or null != '1';
+-----------------------+-----------------------+-----------------------------+
| 0 is null or 0 != '1' | 1 is null or 1 != '1' | null is null or null != '1' |
+-----------------------+-----------------------+-----------------------------+
|                     1 |                     0 |                           1 |
+-----------------------+-----------------------+-----------------------------+

당신이 무엇을 돌려받고 싶은지에 달려있습니다.

시도해 보기..당신에게 효과가 있기를 바랍니다.

SELECT *
FROM `all_conversations`
WHERE `deleted_1` IS NOT NULL
AND `deleted_1` <> 23

=, < 또는 <>과 같은 산술 비교 연산자를 사용하여 NULL을 테스트할 수 없습니다.

이를 직접 시연하려면 다음 쿼리를 사용해 보십시오.

mysql> SELECT 1 = NULL, 1 <> NULL, 1 < NULL, 1 > NULL;
+----------+-----------+----------+----------+
| 1 = NULL | 1 <> NULL | 1 < NULL | 1 > NULL |
+----------+-----------+----------+----------+
|     NULL |      NULL |     NULL |     NULL |
+----------+-----------+----------+----------+

그러니까 당신은 이렇게 말해야 합니다.

SELECT * FROM `all_conversations` WHERE `deleted_1` <> '1' and `deleted_1` is null;

산술 연산자를 사용하여 NULL을 값과 함께 사용할 수 없고 고유 부울을 가지므로 your_field IS NULL이 명시적으로 됩니다.

위의 답변에 동의합니다. 아래 쿼리와 같이 다중 AND 조건이 있는 경우 추가 세부 정보를 추가하십시오. OR 부분이 당신의 조건을 부정확하게 만들기 때문에, 당신은 당신이 확인하는 열을 Where 조건의 첫 부분에 같거나 null로 넣어야 합니다.

  SELECT ts.*, ct.Name AS CategoryName
FROM MJ.Tasks  AS ts 
LEFT JOIN MJ.Lookup_Category AS ct ON ts.CategoryID = ct.ID
WHERE ts.Status!=1 OR ts.Status IS NULL AND ts.CategoryID = @CategoryID AND ts.UserID = @UserID AND  CAST(ts.EndDate AS DATE) = CAST(@EndDate AS DATE)

1을 중심으로 한 인용문을 삭제하는 건 어떨까요?

SELECT * FROM `all_conversations` WHERE `deleted_1` != 1;

언급URL : https://stackoverflow.com/questions/8994408/query-not-equal-doesnt-work

반응형