簡體   English   中英

動態SQL查詢可基於單元格中的空值忽略空值

[英]Dynamic SQL Query to ignore null values based on null value in cell

我在運行時有一個具有不同列名和表的動態SQL查詢。

我正在尋找使SQL查詢基於行是否在任何單元格中包含Null值而忽略讀取數據的方法。

SELECT rsv_intension_rsvt 
FROM resolve_table_kb 
where rsv_intension_rsvt is not null;

我知道使用IS NOT NULL

但是問題是我不知道查詢語法(即列名,以便可以使用IS NOT NULL )。

是否有一種動態解決方案可用於SQL查詢,僅當選定行中的所有單元格都不為空時才讀取/收集行。

謝謝

不,沒有select where * is not null類型的查詢。 您必須分別測試每個字段:

SELECT ...
FROM ...
WHERE field1 is not null AND field2 is not null AND .... AND fieldN is not null

您可以嘗試執行COALESCE()操作,但這仍然很丑陋:

WHERE COALESCE(field1, field2, ..., fieldN, 'allarenull') <> 'allarenull'

但是您仍然必須列出表中的所有字段。

我相信您將需要使用存儲過程或多個聯接(這可能不是最健康的解決方案)來解決此問題,正如Marc B指出的那樣。 您還可以檢查以下問題 ,以解決您所問的同一問題。

我不確定dynamic是什么意思,但是如果您是說實際上是在運行時構建查詢的,那么您可以獲取給定數據庫中給定表的所有列的所有可用列名(可為空或不可為空),那么您只需將它們組合在一起即可進行所需的查詢。

在MySQL中,你可以這樣做

SELECT
        COLUMN_NAME
    FROM INFORMATION_SCHEMA.COLUMNS
    WHERE
        table_name = '<TABLE_NAME>'
        AND IS_NULLABLE = 'YES'
        AND TABLE_SCHEMA='<DB_NAME>';

在SQL Server中,您可以像這樣

(如果您已經選擇了正確的數據庫)( 表參考列參考

SELECT
        Cols.name
    FROM sys.all_columns AS Cols
    INNER JOIN sys.tables AS Tabs ON Cols.object_id = Tabs.object_id
    WHERE
        Tabs.name = '<TABLE_NAME>'
        AND Cols.is_nullable = 1;

而在Oracle中可以像這樣

(已經選擇了適當的數據庫)

SELECT
    COLUMN_NAME
  FROM ALL_TAB_COLUMNS
  WHERE
    TABLE_NAME = '<TABLE_NAME>'
    AND NULLABLE = 'Y';

不知道這是否是通用的Oracle東西(因為我主要使用SQL-Server),但是當我用小提琴進行嘗試時,必須指定的表名始終使用大寫字母。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM