2013-05-18 51 views
1

我試圖使用列JOIN 2個表不屬於任何表相應的主鍵:如何在不使用任何主鍵時加入兩個表?

SELECT * 
FROM TableA A 
INNER JOIN TableB B 
ON A.col5 = B.col5 

然而,上述被返回0 results即使我知道肯定有在Table A其行col5值與的Table B中的值匹配。

我在做什麼錯?

+4

。 。你所知道的「肯定」似乎不是現實。你的語法對於一個連接是正確的。如果表中存在匹配的非空值,則查詢將返回它們。 –

+0

Plz,提供小提琴,證明你的話 – user4035

+0

我們可以得到的數據集? – Tadgh

回答

6

您查詢:

SELECT * 
FROM TableA A 
INNER JOIN TableB B 
ON A.col5 = B.col5; 

先後爲聯接正確的語法。如果有匹配的值,那麼它會返回它。 (或者當然,您可以從應用程序調用此應用程序,並且應用程序代碼或與數據庫的連接可能存在錯誤,但這是另一個問題。)

某些情況下,值看起來相同但不是:

  • 這兩個值都是浮點數。打印出來時它們看起來一樣。但是價值結尾處的位有所不同。切勿使用FLOAT進行EQUI連接。
  • 一個值是一個數字,另一個值是一個字符串。其中一個值的轉換會導致稍微不同的值。
  • 一個值是日期/時間,另一個是字符串。其中一個值的轉換會導致稍微不同的值。
  • 這些值是字符串。大小寫不同。您認爲abcABC1相同,但SQL不。
  • 字符串末尾有空格或其他「隱藏」字符。

,另外兩個是我能想到的,但在所有的數據庫可能不是真正的原因:

  • 一個值是一個char和其他VARCHAR(或它們的寬版)。字符末尾的隱含空格使它們不同。
  • 一個是unicode字符串,另一個是ASCII字符串。兩個字符看起來相同但不是。
0

您的查詢是正確的,應該返回表中的匹配值。但正如你所說的那樣,最後其他表中的值存在不可見的空間,請嘗試使用LTRIM和RTRIM從值中移除不可見的空間。 LTRIM從字符串的開頭刪除空格,RTRIM從字符串的末尾刪除空格。

的查詢是這樣的:

SELECT * FROM tableA的 INNER JOIN表B乙 ON A.col5 = LTRIM(RTRIM(B.col5))

我希望它可以幫助你。

相關問題