2013-02-25 29 views
5

Tôi có một truy vấn mà tôi cần phải kiểm tra khoảng 20 cột khác nhau cho một giá trị 0.HOẶC viết tắt trong Oracle SQL?

Thay vì thực hiện:

ĐÂU SÁCH <> 0 HOẶC HOẶC Allo <> 0 ...

Có cách nào nhanh hơn để làm việc đó? Cái gì như: ĐÂU (BOOK, Allo, ...) <> 0

+1

Tôi nghĩ rằng SQL Server cho phép bạn làm '0 <> BẤT CỨ (SELECT SÁCH UNION SELECT Allo CHỌN ...) '. Sức mạnh đến không quá nhiều từ 'UNION'ing tất cả những thứ bạn muốn cùng nhau, nhưng sử dụng một truy vấn con để tìm nó. Oracle có thể tương đương. –

+3

Khi bạn nói nhanh hơn, bạn chỉ có nghĩa là bạn không muốn nhập tất cả các cột đó ra? Đó là ... khá kỳ lạ, bạn chỉ cần gõ chúng một lần và nó hoạt động mãi mãi. –

+0

Rất đơn giản ... không – SQLMason

Trả lời

5

Mặc dù nó không chạy bất cứ nơi nào khác (MySQL, SQL Server, Postgres) và nó có lẽ không phải SQL chuẩn, nó hoạt động trong Oracle:

WHERE 0 <> ANY (BOOK, ALLO, ...) 

Tested trong SQL-Fiddle


Ngoài ra còn có một cách khác là tiêu chuẩn và hoạt động trong MySQL và Postgres, nhưng không phải trong Oracle:

WHERE (0, 0, ...) <> (BOOK, ALLO, ...) 

Và một cách tiêu chuẩn (sử dụng một bảng giá trị Constructor) mà làm việc trong Postgres và SQL-Server 2012:

WHERE 0 <> ANY (VALUES (BOOK), (ALLO), ...) 
+0

Điều này thật tuyệt, không biết một chức năng như vậy tồn tại. Cảm ơn bạn. – Lock

+0

'ANY' là toán tử, như' IN'. Nó không phải là một chức năng. –

1

Bạn có thể sử dụng:

WHERE (book + allo + ...) > 0 
+2

giả định rằng chúng không phải là số âm ... –

+0

Điểm tốt. Phụ thuộc vào vấn đề :-) – DCookie

+0

Đúng, âm bản có thể xảy ra! – Lock

1

Nếu giá trị tiêu cực là không thể, bạn có thể làm điều này:

WHERE BOOK + ALLO + ... > 0 

Nếu giá trị âm có thể xảy ra, đây là cách ngắn gọn nhất mà tôi có thể nghĩ để thể hiện:

WHERE ABS(BOOK) + ABS(ALLO) + ... > 0 

Ngoài ra, đây là cơ sở dữ liệu bất khả tri.

Các giải pháp này sẽ chỉ hoạt động nếu giá trị null là không thể, nếu có, nó sẽ trở nên khá lộn xộn.

+0

Sau đó bạn có thể sử dụng 'abs (nvl (book, 0)) + ...' cho oracle và 'isnull (..)' cho máy chủ sql ... – glh

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