2011-08-26 49 views
5

Tôi đang cố gắng để hiểu những gì SQL này (từ một cài đặt MySQL) thực sự thực hiện:Đang cố gắng để phân tích cú pháp sql này

IF(coalesce(a.entity_id, 0) != 0, 0, 1) 

Trong khi tôi hiểu những gì liên hiệp làm tôi không hiểu làm thế nào IF tuyên bố là sửa đổi nó.

Trả lời

3

Tôi nghĩ:

liên hiệp (a.entity_id, 0) - trả về giá trị không null đầu tiên,

nếu a.entity_id không phải là null bạn nhận được 0 là kết quả của nếu, khác 1.

a.entity_id = null => kết thành một khối = 0 => if = 1

a.entity_id không phải là null => kết thành một khối = a.entity_id => if = 0

2

liên hiệp trả về NON đầu tiên -n đối số ull. Vì vậy, nếu a.entity_id là null, kết hợp sẽ trả về 0. chứa if() sau đó kiểm tra nếu đối số không bằng 0 và trả về 0 hoặc 1.

về cơ bản đó là cách viết phức tạp a.entity_id IS NULL.

+4

'a.entity_id IS NULL hoặc a.entity_id = 0' –

1

Bạn đang xem chức năng MySQL IF(). Về cơ bản nó là một nhà điều hành ternary trên biểu thức boolean cung cấp trong lập luận 1. (Nghe có vẻ từ câu hỏi của bạn rằng bạn hiểu với liên hiệp đó đang làm.)

  • Nếu expr1 là TRUE (expr1 <> 0 và expr1 <> NULL) thì hàm IF() trả về expr2;
  • Nếu expr1 là FALSE, nó trả về expr3.

IF() trả về giá trị số hoặc chuỗi, tùy thuộc vào ngữ cảnh được sử dụng.

mysql> SELECT IF(1>2,2,3); 
     -> 3 
mysql> SELECT IF(1<2,'yes','no'); 
     -> 'yes' 
mysql> SELECT IF(STRCMP('test','test1'),'no','yes'); 
     -> 'no' 

Đó là một cách không thể đọc được thực sự sôi nổi của không sử dụng a.entity_id IS NULL.

0

Trông với tôi như điều khoản này sẽ đánh giá là 0 nếu a.entity_id không phải là null, và 1 khác.

1

Điều kiện sẽ được đáp ứng nếu a.entity_id là giá trị không phải là NULL không 0.

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