Join

可以使用相同的屬性名稱但不同的域發生連接嗎?

  • January 9, 2019

問題

在執行任何類型的 Join時,所有常見屬性都以一種或另一種方式列在一個列下。但是,我一直無法找到處理同名但具有不同域的列的來源。

從視覺的角度來看,我正在考慮以下案例的列:

在此處輸入圖像描述 在此處輸入圖像描述

域不同,因為一個 B 列是數字,而另一個是字母。

是否可以使用同名但不同域的屬性進行聯接?

我認為你被你的術語誤導了。

SQL 是具有以下示意圖的標準

  • 架構
  • 桌子
  • 柱子
  • 屬性

*Oracle 在實例中沒有單獨的數據庫。模式與使用者相關聯。

SQL 是第 4 代語言,它將知道在哪裡查詢對象的需求與高級的、幾乎是人類語言風格的程式分開

當您在 SQL 中編寫查詢時,編譯器(稱為 SQL 優化器)會將其翻譯成機器級語言並檢索您的數據。因此,它高度依賴優化器來正確檢索它認為最好的數據。

這意味著您的 SQL 只不過是對優化器有意義的建議。您只需要知道結構的名稱是什麼,而不是在哪里或如何獲取它。

SQL 具有幫助優化器選擇正確數據集的提示和運算符,但優化器選擇首先解析的查詢的ORDER

因此,您正在編寫邏輯查詢。如果連接了兩個表,您有責任通過專門呼叫可以連接的列來幫助優化器。

即使屬性不同,優化器也足夠靈活,知道如何動態轉換這些值。例如,‘13’ 的 VARCHAR 類型值仍然與 tinyint、integer、numeric 值相當相似,因此優化器會將這些列隱式轉換為相同的數據類型!

以下範例在 TSQL 中:

CREATE TABLE TableA (col_A int, col_B varchar(24) )
CREATE TABLE TableB (col_A varchar(24), col_B int)
INSERT INTO TableA (col_A, col_B)
VALUES (1, ‘My Value’)
INSERT INTO TableB (col_A, col_B)
VALUES (‘Not my Value’, 1)

SELECT A.Col_B
FROM TableA AS A
INNER JOIN TableB AS B ON A.Col_A = B.col_B

請注意,我們使用別名來幫助優化器了解連接的含義以及要返回的列的含義。

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