我有一個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. 在所有表格中搜索
- 2. 在PgAdmin的所有表格中搜索
- 3. 在所有表格中搜索具有列名稱的值
- 4. Sharepoint搜索列表中的所有列
- 5. jQuery正則表搜索沒有在所有列中搜索,只有第一列
- 6. Oracle在字符串中搜索所有表的所有列
- 7. 在KendoUI Grid中搜索所有列
- 8. SQL搜索所有表中的所有列
- 9. 搜索db2數據庫所有表的所有列中的值
- 10. 搜索所有表格並返回列的最大長度
- 11. 需要在表中的所有列中搜索字符串
- 12. 在數據庫的所有表格,行和列中搜索字符串
- 13. 在django中搜索表格
- 14. 在數據表的所有列中搜索字符串
- 15. 在表中搜索某個值的所有列?
- 16. 在所有表中搜索列描述描述元
- 17. SQL Server - 在所有數據庫表中搜索一列
- 18. MySQL/Doctrine - 在所有列和連接表中搜索
- 19. 我想在Oracle的所有表的所有列中搜索特定值11g
- 20. 在特定值的所有表中搜索所有字段(Oracle)
- 21. 搜索所有表中的字符串
- 22. 搜索Oracle DB中的所有表DB
- 23. 在列表中搜索
- 24. 在2D列表中搜索?
- 25. Jqgrid預先搜索,所有搜索運算符不顯示在搜索運算符下拉列表中
- 26. 搜索電子表格中的所有列以獲取唯一值
- 27. 索引/匹配VBA替代在表格及其列中搜索
- 28. 獲取所有索引且搜索項在列表中,不僅是第一個
- 29. 搜索所有目錄中
- 30. 如何搜索表中所有列的特定值?
我站在第一部分,並已這樣做,動態查詢是我卡住了。我不知道在第一步之後要做什麼,'yourfield'來自何處? – jhnvarun
你創建一個遊標,爲遊標循環,建立一個字符串'strSQL'與你想要的查詢和'執行strSQL'我包括與示例的鏈接 –
好吧,所以我是sry,但它仍然沒有意義給我,你能否把腳本寫在一個頁面上,而不是提供其他問題的鏈接? – jhnvarun