0

我有两张桌子 TableA

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,因为这是大型查询的一小部分,这个连接语句会影响整个查询。谁能告诉我我需要尝试什么样的加入。

4

2 回答 2

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
于 2013-06-11T09:50:55.473 回答
0

您的表格似乎没有被规范化。特别是,它们似乎违反了第二范式

要解决这个问题,您应该将表结构更改为如下所示:

表A

id    name
1     asd
2     afg
3     qwe
4     dsf

表大学

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
于 2013-06-11T09:52:51.620 回答