我有一個300列以上的表格,其中許多列中沒有數據。有沒有一個查詢我可以用來找出這些列的名稱,所以我可以刪除他們的表。另外我使用的是紅移服務器上的PostgreSQL數據庫,如果該事項在表格中搜索所有列
0
A
回答
0
首先創建一個DINAMIC查詢你
SELECT *
FROM information_schema.columns
WHERE table_schema = 'your_schema'
AND table_name = 'your_schema'
然後使用一個循環中的字段名
SELECT count(*)
FROM 'your_schema'.'your_schema'
WHERE `yourfield` IS NOT NULL
HAVING count(*) = 0
0
您可以嘗試使用jsonb type和functions。
比方說,你的表聲明爲
create table t as (x int, y varchar, z numeric);
首先讓轉換表的行jsonb。這很簡單:
select to_jsonb(t.*) from t;
結果(測試數據)
to_jsonb
--------------------------
{"x":1,"y":"a","z":null}
{"x":2,"y":"b","z":null}
下一步,我們將這些結果轉化爲行像(鍵,值)使用另一個JSON功能:
select jsonb_each(to_jsonb(t.*)) from t;
結果:
jsonb_each
-------------
(x,1)
(y,"""a""")
(z,null)
(x,2)
(y,"""b""")
(z,null)
它是almos我們需要什麼。下一步:
select (w).key, (w).value from (select jsonb_each(to_jsonb(t.*)) as w from t) tt;
結果
key | value
-----+-------
x | 1
y | "a"
z | null
x | 2
y | "b"
z | null
這裏我們使用(w)
指定它是現場的,而不是表。
而最後大步:
select
(w).key
from
(select jsonb_each(to_jsonb(t.*)) as w from t) tt
group by
(w).key
having
count(*) filter (where((w).value != 'null')) = 0;
結果
key
-----
z
嘗試使用剛剛更換t
你的表名的最後一個查詢。
UPD:
您也可以嘗試使用PostgreSQL的統計信息:
analyse yourtable;
select
pg_class.relname,
pg_attribute.attname,
pg_statistic.stanullfrac
from
pg_class join
pg_statistic on (pg_class.oid = pg_statistic.starelid) join
pg_attribute on (pg_class.oid = pg_attribute.attrelid and pg_statistic.staattnum = pg_attribute.attnum)
where
pg_class.relname = 'yourtable';
在stanullfrac
欄,你會看到空的相對量爲每個表的列1意味着所有完全無效(但我不知道它是如何準確的)
相關問題
- 1. 在PgAdmin的所有表格中搜索
- 2. 在所有表格中搜索具有列名稱的值
- 3. Sharepoint搜索列表中的所有列
- 4. SQL搜索所有表中的所有列
- 5. 搜索所有表格並返回列的最大長度
- 6. 需要在表中的所有列中搜索字符串
- 7. 在數據庫的所有表格,行和列中搜索字符串
- 8. 在django中搜索表格
- 9. 在所有表中搜索列描述描述元
- 10. SQL Server - 在所有數據庫表中搜索一列
- 11. 我想在Oracle的所有表的所有列中搜索特定值11g
- 12. 在特定值的所有表中搜索所有字段(Oracle)
- 13. 搜索Oracle DB中的所有表DB
- 14. 搜索所有表中的字符串
- 15. 在2D列表中搜索?
- 16. 搜索電子表格中的所有列以獲取唯一值
- 17. 索引/匹配VBA替代在表格及其列中搜索
- 18. 獲取所有索引且搜索項在列表中,不僅是第一個
- 19. 搜索所有目錄中
- 20. SQL Server中多個表的所有列的關鍵字搜索
- 21. 如何獲取Lucene中所有搜索關鍵字的列表?
- 22. 如何打印對象列表中的所有搜索匹配
- 23. 如何使用搜索和替換表中的所有列
- 24. 在eclipse中的所有類中搜索?
- 25. 搜索列格式
- 26. 正在搜索HTML表格
- 27. 如何在加入另一個表時搜索表中的所有列?
- 28. 搜索列表中的現有對象
- 29. Mysql搜索所有字符串排列
- 30. 搜索所有節點的xml列
我站在第一部分,並已這樣做,動態查詢是我卡住了。我不知道在第一步之後要做什麼,'yourfield'來自何處? – jhnvarun
你創建一個遊標,爲遊標循環,建立一個字符串'strSQL'與你想要的查詢和'執行strSQL'我包括與示例的鏈接 –
好吧,所以我是sry,但它仍然沒有意義給我,你能否把腳本寫在一個頁面上,而不是提供其他問題的鏈接? – jhnvarun