2013-02-05 37 views
6
SELECT * 
    FROM table WHERE id IN ('21') 
    AND (content_id IS NULL OR content_id = 0 OR content_id = '') 

Có cách viết ngắn hơn điều kiện này không.mysql nếu không null, 0 hoặc ""

Tôi có một cột int() có thể là: NULL, 0 hoặc EMPTY.

+1

Cột int có thể vô hiệu có thể là int hoặc NULL - không thể là chuỗi rỗng. –

+0

là content_id một cột int hoặc một cột varchar? nếu đó là một cột int không cần phải kiểm tra xem content_id = '' vì vậy tôi nghĩ rằng tôi sẽ xóa câu trả lời của tôi :) – fthiella

Trả lời

7

Bạn có thể sử dụng chức năng IFNULL trong MySQL.

select ____ 
    from tbl 
where IFNULL(content_id, 0) = 0 
1

Bạn có thể thử COALESCE:

SELECT * FROM table WHERE id IN ('21') 
AND COALESCE(content_id,0) =0; 
+0

Coalesce là điện thoại di động cho tất cả các nền tảng RDBMS. Kiểm tra ở đây để so sánh [hàm SQL ISNULL(), NVL(), IFNULL() và hàm COALESCE()] (http://www.w3schools.com/sql/sql_isnull.asp) – bonCodigo

2

Tôi nghĩ rằng cách ngắn hơn là thế này:

SELECT * 
FROM table 
WHERE id IN ('21') 
     AND COALESCE(content_id IN ('0', ''), 1) 

content_id IN ('0', '') có thể giả định các giá trị:

  • Đúng nếu conent_id là một trong hai '0' hoặc ''
  • Null nếu conent_id IS Null
  • False khác.

Nếu đó là Null, với COALESCE tôi trả về 1, tương đương với True.

Các vấn đề liên quan