Làm cách nào để chọn một số cột trong bảng chỉ chứa giá trị NULL cho tất cả các hàng? Giả sử nếu Bảng có 100 cột, trong số 100 cột này, 60 cột có giá trị null. Làm thế nào tôi có thể viết nơi điều kiện để kiểm tra xem 60 cột là null.Truy vấn SQL để kiểm tra xem 40 cột trong bảng có rỗng không
Trả lời
where c1 is null and c2 is null ... and c60 is null
phím tắt sử dụng string concatenation
(Oracle cú pháp):
where c1||c2||c3 ... c59||c60 is null
Đó là bit cuối cùng không may dựa trên braindead Oracle không có khả năng nói sự khác biệt giữa một chuỗi rỗng và NULL. Nó không phải là một giải pháp tốt. – paxdiablo
Nhưng tôi sẽ bỏ phiếu cho bạn khi bit đầu tiên là đúng cách để làm điều đó, không có khả năng tái cấu trúc bảng DB. – paxdiablo
Nếu máy chủ SQL của nó, có thể sử dụng kết hợp ... – Naren
có thể với một liên hiệp
SELECT * FROM table WHERE coalesce(col1, col2, col3, ..., colN) IS NULL
Nếu có bất kỳ cơ hội nào để sử dụng chỉ mục trên bất kỳ trường nào trong số này, bạn đã giết nó bằng cách đặt một hàm quanh nó. – dkretz
Vâng, chức năng mỗi hàng là một kẻ giết người thực hiện trên bất kỳ bảng có kích thước nào. – paxdiablo
coalesce chỉ hoạt động khi tất cả các cột có kiểu dữ liệu tương thích (ít nhất trong Oracle nó không hoạt động cho một kết hợp của số, ngày và cột VARCHAR) –
Nó sẽ giúp để biết được db bạn đang sử dụng và có lẽ đó ngôn ngữ hoặc db framework nếu sử dụng một.
Điều này sẽ hoạt động mặc dù trên bất kỳ cơ sở dữ liệu nào.
Một cái gì đó như thế này có lẽ sẽ là một thủ tục được lưu trữ tốt, vì không có tham số đầu vào cho nó.
select count(*) from table where col1 is null or col2 is null ...
bạn đang cố gắng tìm hiểu xem một tập hợp cụ thể của 60 cột là null, hoặc làm bạn chỉ muốn tìm hiểu nếu có 60 trong số 100 cột là null (không nhất thiết phải giống nhau 60 cho mỗi hàng ?)
Nếu đó là sau này, một cách để làm điều đó trong oracle sẽ được sử dụng chức năng nvl2, như vậy:
select ... where (nvl2(col1,0,1)+nvl2(col2,0,1)+...+nvl2(col100,0,1) > 59)
một thử nghiệm nhanh của ý tưởng này:
select 'dummy' from dual where nvl2('somevalue',0,1) + nvl2(null,0,1) > 1
Returns 0 hàng trong khi:
select 'dummy' from dual where nvl2(null,0,1) + nvl2(null,0,1) > 1
Returns 1 hàng như mong đợi kể từ hơn một trong các cột là null.
Trước hết, nếu bạn có bảng có nhiều giá trị rỗng và bạn sử dụng SQL Server 2008 - bạn có thể muốn xác định bảng sử dụng cột thưa thớt (http://msdn.microsoft.com/en-us/library/cc280604.aspx). Thứ hai, tôi không chắc chắn liệu coalesce có giải quyết được câu hỏi hay không - có vẻ như Ammu thực sự muốn tìm danh sách các cột không có giá trị cho tất cả các hàng, nhưng tôi có thể đã hiểu lầm. Tuy nhiên - đó là một câu hỏi thú vị, vì vậy tôi đã viết một thủ tục để liệt kê các cột null cho bất kỳ bảng đưa ra:
IF (OBJECT_ID(N'PrintNullColumns') IS NOT NULL) DROP PROC dbo.PrintNullColumns; go CREATE PROC dbo.PrintNullColumns(@tablename sysname) AS BEGIN SET NOCOUNT ON; DECLARE @query nvarchar(max); DECLARE @column sysname; DECLARE columns_cursor CURSOR FOR SELECT c.name FROM sys.tables t JOIN sys.columns c ON t.object_id = c.object_id WHERE t.name = @tablename AND c.is_nullable = 1; OPEN columns_cursor; FETCH NEXT FROM columns_cursor INTO @column; WHILE (@@FETCH_STATUS = 0) BEGIN SET @query = N' DECLARE @c int SELECT @c = COUNT(*) FROM ' + @tablename + ' WHERE ' + @column + N' IS NOT NULL IF (@c = 0) PRINT (''' + @column + N''');' EXEC (@query); FETCH NEXT FROM columns_cursor INTO @column; END CLOSE columns_cursor; DEALLOCATE columns_cursor; SET NOCOUNT OFF; RETURN; END; go
Dưới đây là một phương pháp mà dường như với tôi để được logic cũng như (sử dụng Netezza hoặc TSQL)
SELECT KeyColumn, MAX(NVL2(TEST_COLUMN,1,0) AS TEST_COLUMN
FROM TABLE1
GROUP BY KeyColumn
Vì vậy, mỗi TEST_COLUMN
có giá trị MAX
là 0 có cột chứa tất cả các giá trị rỗng cho tập bản ghi. Hàm NVL2
đang nói nếu dữ liệu cột không trả về giá trị 1, nhưng nếu nó là null thì trả về 0.
Lấy MAX
của cột đó sẽ tiết lộ nếu có hàng nào không rỗng. Giá trị 1 có nghĩa là có ít nhất 1 hàng có dữ liệu. Zero (0) có nghĩa là mỗi hàng là null.
- 1. Làm cách nào để kiểm tra xem cột văn bản SQL Server có trống không?
- 2. Truy vấn phụ SQL trong ràng buộc kiểm tra
- 3. Truy vấn SQL có SUM trên cột trong bảng JOIN
- 4. Sql truy vấn nhận được tên cột rỗng
- 5. Kiểm tra xem bảng truy cập có tồn tại không
- 6. SQL để kiểm tra xem cơ sở dữ liệu có trống không (không có bảng)
- 7. Java: Cách kiểm tra xem đối tượng có rỗng không?
- 8. Kiểm tra xem có cột nào KHÔNG NULL
- 9. SSRS - Kiểm tra xem dữ liệu có rỗng không
- 10. Cách kiểm tra xem tệp có rỗng trong Bash không?
- 11. Truy vấn để kiểm tra xem trình kích hoạt có tồn tại trên bảng MYSQL
- 12. Truy vấn để kiểm tra chỉ mục trên một bảng
- 13. Sử dụng câu lệnh CASE để kiểm tra xem cột có tồn tại trong bảng hay không - SQL Server
- 14. Làm cách nào để kiểm tra xem cột có tồn tại trong SQL Server không?
- 15. LINQ: Kiểm tra xem cột chuỗi có giá trị (ví dụ: không rỗng hoặc trống)
- 16. Cách kiểm tra xem biến bảng có trống trong SQL Server không?
- 17. Truy vấn SQL có nhiều giá trị trong một cột
- 18. cách kiểm tra xem hàm băm có rỗng trong perl
- 19. Làm cách nào để kiểm tra xem cột bảng mysql có còn tồn tại không?
- 20. Làm cách nào để kiểm tra xem cột datetime của SQL Server có trống không?
- 21. Truy vấn SQL để thêm cột mới sau cột hiện có trong SQL Server 2005
- 22. động chọn cột trong truy vấn SQL
- 23. Kiểm tra xem bảng có tồn tại
- 24. Kiểm tra xem bảng có tồn tại trong cơ sở dữ liệu hay không - PL SQL
- 25. Máy chủ SQL: kiểm tra xem cột bảng có tồn tại hay không và xóa các hàng
- 26. Thêm cột bổ sung để xem, không có trong bảng
- 27. Làm cách nào để kiểm tra xem liệu tên cột có tồn tại trong CachedRowSet không?
- 28. Cách thích hợp để kiểm tra xem một chuỗi có rỗng trong Perl không?
- 29. Cách kiểm tra xem con trỏ rỗng trong một Query SQLiteDatabase
- 30. Kiểm tra xem bảng có tồn tại trong C#
python, C# và ruby? Bạn có thể giúp đỡ bằng cách cung cấp cơ sở dữ liệu bạn đang sử dụng không? – Damovisa
Bạn có nghĩa là nơi các cột này là null cho tất cả các hàng? 40 hay 60? Cơ sở dữ liệu nào? –
Tôi không hiểu câu hỏi. Bạn muốn biết cho một cột nhất định nếu có ít nhất một giá trị null trong tất cả các hàng? Hoặc nếu tất cả các giá trị là null? Hay bạn nhầm lẫn các hàng với các cột? –