2010-03-25 70 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