我想知道如何在不同數據庫環境(如生產和開發)中的同一表之間進行比較。如何比較不同envionment中的同一表PROD,DEV
SELECT * FROM [email protected]
MINUS
SELECT * FROM [email protected]
任何提示。
我想知道如何在不同數據庫環境(如生產和開發)中的同一表之間進行比較。如何比較不同envionment中的同一表PROD,DEV
SELECT * FROM [email protected]
MINUS
SELECT * FROM [email protected]
任何提示。
您需要在其中一個環境中創建數據庫鏈接。假設您將在DEV上爲PROD創建數據庫鏈接,並授予其選擇權,以避免任何破壞性數據。
CREATE PUBLIC DATABASE LINK PROD
CONNECT TO <user_name>
IDENTIFIED BY <password>
USING '<service_name>';
然後讓你需要做的一切分歧:
SELECT * FROM [email protected]
MINUS
SELECT * FROM TABLE1
和oposite查詢:
SELECT * FROM TABLE1
MINUS
SELECT * FROM [email protected]
謝謝Kacper :)完美答案.. –
如果兩個表具有相同的列來比較它們的最佳方式,而無需昂貴的減號操作或連接(只有讀取每個表一次)是這樣的:
select max(flag), col1, col2, ...
from (
select 'prod' as flag, col1, col2, ... from table1_prod
union all
select 'dev' as flag, col1, col2, ... from table1_dev
)
group by col1, col2, ...
having count(*) = 1
在GROUP BY,如果該行在兩個表中是相同的,它將具有計數2,因此不會被選擇。如果該行僅在產品中或僅在dev中,則計數爲1。一個「更改」行將在兩個列中,但至少一列中具有不同的值,所以它確實是兩個不同的組。 「更改」行只有在表格中有可以匹配它們的唯一鍵時纔有意義;您可以通過比較唯一密鑰中的值來識別「已更改」行。
什麼@用於連接到不同的數據庫。 –
有什麼不對您展示SQL? – OldProgrammer