2014-10-10 57 views
0

我有兩個表。表A:訪問SQL從鏈接表中選擇多列

First_name Last_name score 
    Joo  jojo  100 
    Jake  Tim  30 

表B:

Name length 
Joo  3 
Jake 4 
Jojo 4 
Tim  3 

的PK對於A是加入姓和名的,對於B PK是名稱。如果我想打印是這樣的:

First_name Last_name score First_name_length Last_name_length 

我應如何從下面的代碼修復:

Select A.*, B.length 
From A,B 
Where A.First_name=B.Name or A.Last_name=B.Name; 

感謝。

更新:我通過@paqogomez從下面的答案稍微改變了一些問題來解決問題。在訪問中,使用雙內連接,應該使用(),請檢查這個帖子。謝謝大家的熱心幫助。

double inner join in access db

+0

請澄清如果表B用於存儲第一/姓氏 – Ram 2014-10-10 17:06:49

+0

是的長度, B用於存儲長度 – 2014-10-10 18:50:53

+0

以及在那種情況下,我的答案是最簡單的查詢來獲得所需的結果 – Ram 2014-10-10 18:52:50

回答

1

加入到你的名字表兩次會做到這一點:

select 
    b1.name as First_name, 
    b2.name as Last_name, 
    a.score as score, 
    b1.length as First_name_length, 
    b2.length as Last_name_length 
from 
    (a 
    inner join b as b1 on a.First_name = b1.name) 
    inner join b as b2 on a.Last_name = b2.name 

你會遇到然而,問題是,如果2人具有相同的姓氏或名字。清理數據並給每個用戶一個獨特的價值會更好。

編輯:

我假設你想從你的表B使用的值,如果你真的剛開名稱的字符串長度,那麼請用@ SRIKANTH的答案。

雖然OP使用Access,但我使用sql server的this fiddle顯示它正在工作。上述

的括號添加access's double inner join

+0

謝謝,內部連接似乎是最好的選擇。 – 2014-10-10 17:07:40

+0

它返回語法錯誤,我應該先定義b1還是b2?再次感謝 – 2014-10-10 18:52:53

+0

@henduoqian語法錯誤是什麼?我做了一些編輯 – paqogomez 2014-10-10 19:08:45

1

Len以下代碼是足以使所需的輸出

Select First_name, 
     Last_name, 
     score, 
     len(First_name) AS First_name_length, 
     len(Last_name) AS Last_name_length 
From A 
+0

大聲笑..我甚至沒有考慮到他只是在尋找字符串名稱的長度。如果是這樣的話,這將是答案。 +1 – paqogomez 2014-10-10 16:55:49

+0

是的,最初我想過使用兩個類似於你的連接,但再次看一下表B中的數據我覺得這應該做這個工作 – Ram 2014-10-10 16:59:41

+0

它可能只是很差的示例數據,但我們需要從OP進行澄清。 – paqogomez 2014-10-10 17:01:16