我有两张桌子 表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语句将影响整个查询。可以任何一个人告诉我需要尝试什么样的联接。
答案 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