2010-03-25 69 views
1

我對如何處理這個SQL查詢有點困惑。跨兩個表的SQL SELECT

我有兩個表(相等的記錄數),我想返回一個列,其中是兩者之間的分工。

換句話說,這是我未工作,正確查詢:

SELECT((SELECT v FROM Table1)/(SELECT DotProduct FROM Table2)); 

我會怎麼做呢?所有我想要一個列,其中每行等於Table1中的同一行除以表2中的同一行。結果表具有相同的行數,但我得到的東西比原來的兩個表多得多。

我處於完全喪失狀態。有什麼建議?

+1

您可能想稍微清理標籤。你使用MySQL,MSSQL(Microsoft SQL Server)還是其他一些數據庫? – JohnFx 2010-03-25 20:29:23

回答

3

這聽起來像你有兩種表之間的某種關鍵。你需要一個Inner Join:

select t1.v/t2.DotProduct 
from Table1 as t1 
inner join Table2 as t2 
    on t1.ForeignKey = t2.PrimaryKey 

應該工作。只要確保你注意到由零錯誤劃分。

+0

我得到每個結果的4份副本。你見過這個? – 2010-03-25 20:29:08

+0

您是使用內部連接還是最初發布的哈希連接(這是錯誤的...我誤解了這個問題)? – 2010-03-25 20:30:18

1

您需要對錶格進行JOIN並分割所需的列。

SELECT(Table1.v/Table2.DotProduct)FROM表1表2 JOIN ON 東西

你需要substitue 東西告訴SQL如何匹配的行: 喜歡的東西:Table1.id = Table2.id

2

您沒有指定完整的表結構,因此我將假設一個公共ID列來鏈接表中的行。

SELECT table1.v/table2.DotProduct 
FROM Table1 INNER JOIN Table2 
      ON (Table1.ID=Table2.ID) 
0

如果你的Fileds是你需要做的是爲了避免整數運算都是整數:

select t1.v/(t2.DotProduct*1.00) 
from Table1 as t1 
inner join Table2 as t2 
    on t1.ForeignKey = t2.PrimaryKey 

如果您在與值表1你需要指定使用哪個表2有多個值 - 我選擇了最大的一個。

select t1.v/(max(t2.DotProduct)*1.00) 
from Table1 as t1 
inner join Table2 as t2 
    on t1.ForeignKey = t2.PrimaryKey 
Group By t1.v