2013-10-10 42 views
0

我有这样的查询加入子查询,而无需使用

SELECT DISTINCT 
    [fldID], 
    [fldValue] 
      FROM 
       (
        (
         SELECT 
          alias1.[fldID], 
          alias1.[fldValue] 
         FROM someT as alias1 
          .... 
        ) 
       ) AS subQuery_1 
      INNER JOIN 
      (
       SELECT 
        alias1.[fldID], 
        alias1.[fldValue] 
       FROM someT as alias1 
        ... 
      ) AS subQuery_2 USING(fldID, fldValue) 

它工作正常,在MySQL,但SQL Server不支持使用。所以,我必须使用JOIN这样的:

ON [subQuery_1].[fldID] = [subQuery_2].[fldID] 
AND [subQuery_1].[fldValue] = [subQuery_2].[fldValue] 

但此查询导致错误:

Ambiguous column name fldID 
Ambiguous column name fldValue 

所以,我怎么能实现这样一种在SQL Server JOIN的?

+3

你必须调整你的'SELECT'声明说,不管你是从'subQuery_1'选择或'subQuery_2' –

+0

向我们展示你想查询在SQL Server上不起作用。向我们展示一个正在运行的MySQL查询,然后说您对SQL Server进行了某种改变,但是它会引发错误,并不能帮助我们,因为我们不再确切知道新的非工作查询是什么。这就是像这样的语法错误的细节。 – RBarryYoung

+0

@RBarryYoung这个问题有一切需要。 – Szymon

回答

2

你只需要指定从哪个子查询你把这些列从(这不要紧,你采取哪一种,你的情况,你在两列加入)

SELECT DISTINCT 
subQuery_1.[fldID], 
subQuery_1.[fldValue] 
     FROM 
      (
       (
        SELECT 
         alias1.[fldID], 
         alias1.[fldValue] 
        FROM someT as alias1 
         .... 
       ) 
      ) AS subQuery_1 
     INNER JOIN 
     (
      SELECT 
       alias1.[fldID], 
       alias1.[fldValue] 
      FROM someT as alias1 
       ... 
     ) AS subQuery_2 
ON [subQuery_1].[fldID] = [subQuery_2].[fldID] 
AND [subQuery_1].[fldValue] = [subQuery_2].[fldValue] 
+1

谢谢!当然这是一个有效的解决方案! – kaa

0

在你查询你是不是在最终选择中添加表别名。您需要指定即将从表像这样的列:

SELECT DISTINCT 
    subQuery_1.[fldID], 
    subQuery_1.[fldValue] 
      FROM 
       (
        (
         SELECT 
          alias1.[fldID], 
          alias1.[fldValue] 
         FROM someT as alias1 
          .... 
        ) 
       ) AS subQuery_1 
      INNER JOIN 
      (
       SELECT 
        alias1.[fldID], 
        alias1.[fldValue] 
       FROM someT as alias1 
        ... 
      ) AS subQuery_2 
      on [subQuery_1].[fldID] = [subQuery_2].[fldID] 
AND [subQuery_1].[fldValue] = [subQuery_2].[fldValue]