PostgreSQL chọn các trường trống kiểu số nguyên


12

Tôi có một bảng và tôi cần chọn tất cả các hàng có giá trị trống cho fk_fc_idtrường (như một khúc dạo đầu để xóa chúng),

    Column     |            Type             |                         Modifiers
---------------+-----------------------------+------------------------------------------------------------
 di_timestamp  | timestamp without time zone |
 di_item_value | character varying(10)       |
 fk_fc_id      | integer                     |
 di_id         | integer                     | not null default nextval('data_item_di_id_seq1'::regclass)

Tuy nhiên điều này không hoạt động,

# select fk_fc_id,di_timestamp,di_item_value from data_item where fk_fc_id="";
ERROR:  zero-length delimited identifier at or near """"
LINE 1: ...di_timestamp,di_item_value from data_item where fk_fc_id="";
                                                                    ^

Cố gắng Nullcũng không hoạt động.

Nếu bất cứ ai có bất kỳ đề nghị về cách sắp xếp này, tôi sẽ rất biết ơn.


1
chọn fk_fc_id, di_timestamp, di_item_value từ data_item trong đó fk_fc_id là null
foibs

2
Dấu ngoặc kép không được sử dụng cho chuỗi trong PostgreSQL. Dấu ngoặc đơn được sử dụng cho chuỗi. Nhưng bạn không nên so sánh các chuỗi có độ dài bằng không với các số nguyên! Và so sánh các giá trị với nullviệc sử dụng =toán tử sẽ luôn trả về nullvà khiến hàng đó bị loại trừ.
Colin 't Hart

Câu trả lời:


20

Đây không thực sự liên quan đến quản trị cơ sở dữ liệu, cũng không thực sự về PostgreSQL, nhưng như @foibs đã trả lời, bạn nên xem IS NULL :

 SELECT fk_fc_id,
        di_timestamp,
        di_item_value  
 FROM data_item  
 WHERE fk_fc_id IS NULL

1
Ah, tôi đã cố gắng = Null chứ không phải là Null. Cảm ơn,
James

Cả hai (=; IS) hoạt động tốt trong 9,4
Petr

0

Bạn phải sử dụng trích dẫn duy nhất:

SELECT fk_fc_id,
        di_timestamp,
        di_item_value  
 FROM data_item  
 WHERE fk_fc_id=''

Về mặt kỹ thuật, bạn đã đúng, một chuỗi trong SQL nên được phân cách bằng các dấu ngoặc đơn. Tuy nhiên, trong trường hợp cụ thể này, OP không nên so sánh với một chuỗi (trống hoặc không) ở vị trí đầu tiên, bởi vì cột trong câu hỏi được định nghĩa là integer. Như bạn có thể đọc trong các nhận xét dưới câu trả lời được chấp nhận, OP quyết định thử so sánh với một chuỗi trống chỉ vì họ không tìm ra cách so sánh chính xác với null (đó là những gì họ thực sự theo sau).
Andriy M
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.