加入两个表以获取基于列的公共数据

时间:2015-06-15 09:44:18

标签: sql sql-server

我有两张桌子:

  • Table1colA, colB, colC
  • Table2colX, colY, colZ

我尝试从Table1获取colC的{​​{1}}个值与Table2 colZ匹配的所有行。

我尝试了以下内容:

select Table1.colA,Table1.colB,Table1.colC 
from Table1 inner join Table2 on Table1.colC = Table2.colZ 

这似乎不起作用,因为查询的结果是Table1中存在的行数的20倍。

真心感谢任何帮助。

3 个答案:

答案 0 :(得分:3)

三个选项:

  1. INNER JOINDISTINCT

    一起使用
    SELECT DISTINCT Table1.colA,
                    Table1.colB,
                    Table1.colC 
               FROM Table1 
         INNER JOIN Table2 ON Table1.colC = Table2.colZ 
    
  2. 使用EXISTS

    SELECT Table1.colA,
           Table1.colB,
           Table1.colC 
      FROM Table1 WHERE EXISTS (SELECT 1 FROM Table2 WHERE ColZ = ColC)
    
  3. 使用IN

    SELECT Table1.colA,
           Table1.colB,
           Table1.colC 
      FROM Table1 
     WHERE ColC IN (SELECT ColZ FROM Table2)
    

答案 1 :(得分:2)

您可以像这样使用EXISTS

select Table1.colA,Table1.colB,Table1.colC from Table1 
WHERE EXISTS (SELECT 1 FROM Table2 WHERE Table1.colC = Table2.colZ)

答案 2 :(得分:0)

在查询中使用DISTINCT

SELECT DISTINCT
    Table1.colA,Table1.colB,Table1.colC 
FROM Table1 
INNER JOIN Table2 
  ON Table1.colC = Table2.colZ