Oracle

在哪個表中查找我可以找到多個列

  • June 29, 2022

我正在嘗試編寫一個查詢,它將向我顯示包含以下列的表:ProductGroupProductClassProductID

但我在這方面不是很成功。有人可以幫我嗎?

對於甲骨文:

SELECT TABLE_NAME
FROM ALL_IND_COLUMNS
WHERE COLUMN_NAME IN ('ProductGroup', 'ProductClass', 'ProductID')
GROUP BY TABLE_NAME
HAVING COUNT(*) = 3

對於 MS SQL 和其他:

SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME IN ('ProductGroup', 'ProductClass', 'ProductID')
GROUP BY TABLE_NAME
HAVING COUNT(*) = 3

這取決於您所說的“整個數據庫”。

如果它確實是數據庫,那麼您將查詢DBA_TAB_COLUMNS,以有權訪問該視圖的使用者身份連接(例如 SYS,如果您沒有任何其他):

SQL> connect sys@pdb1 as sysdba
Enter password:
Connected.
SQL> select owner, table_name from dba_tab_columns where column_name = 'EMPNO';

OWNER                          TABLE_NAME
------------------------------ ------------------------------
SCOTT                          EMP
SCOTT                          TEST

如果要檢查您有權訪問的所有表,請查詢ALL_TAB_COLUMNS

SQL> connect scott@pdb1
Enter password:
Connected.
SQL> select owner, table_name from all_tab_columns where column_name = 'EMPNO';

OWNER                          TABLE_NAME
------------------------------ ------------------------------
SCOTT                          EMP
SCOTT                          TEST

如果您想查看屬於您的架構的表,那麼它就是USER_TAB_COLUMNS(在某些 DBMS 中,他們稱其為“數據庫”;在 Oracle 中,這只是一個“架構”——這就是為什麼我問“數據庫”對您意味著什麼):

SQL> select table_name from user_tab_columns where column_name = 'EMPNO';

TABLE_NAME
------------------------------
EMP
TEST

SQL>

引用自:https://dba.stackexchange.com/questions/313864