加入两个没有重复值的表

时间:2013-06-11 09:42:18

标签: sql-server-2008

我有两张桌子 表A

id    name
1     asd
2     afg
3     qwe
4     dsf

表B

id    desc    uni
1     kfgh    asad
1     oiuy    asad
1     wert    asad
3     wewe    sfds
4     lkjh    qwer
4     poiu    qwer

现在我想要加入这两个表 在我尝试内连接时获取列uni中的值

SELECT     uni FROM      tableA as A JOIN tableB as B  ON  A.id = B.id

它给了我TableB中的所有行。你注意到id为1的行三次。我不能在这里使用distinct,因为这是一个大型查询的一小部分,这个join语句将影响整个查询。可以任何一个人告诉我需要尝试什么样的联接。

2 个答案:

答案 0 :(得分:1)

使用子查询来获取所需的不同位

SELECT DISTINCT id, uni FROM tableb

所以

SELECT     
  uni 
FROM
   tableA as A 
JOIN (
       SELECT DISTINCT id, uni FROM tableb
     ) as B  
ON  A.id = B.id

修改 如果你想要tableA中的所有行 - 你需要使用左连接

SELECT     
  a.id, 
  b.uni 
FROM
   tableA as A 
LEFT JOIN (
       SELECT DISTINCT id, uni FROM tableb
     ) as B  
ON  A.id = B.id

答案 1 :(得分:0)

您的表格似乎不是normalized。特别是,它们似乎违反了second normal form

要解决此问题,您应该将表结构更改为以下内容:

<强>表A

id    name
1     asd
2     afg
3     qwe
4     dsf

表格Unis

id    uni
1     asad
3     sfds
4     qwer  

表格

id    desc
1     kfgh
1     oiuy
1     wert
3     wewe
4     lkjh
4     poiu

并使用此查询:

SELECT unis.uni FROM tableA AS A JOIN tableUnis AS unis ON A.id = unis.id