0
我有两个表,我试图加入为第三个表生成一组独特的数据,但遇到麻烦做得很好。如何连接两个表格,每边都有不同的列?
- 的
left
表具有id
字段,以及一个公共连接字段(a
)。 - 的
right
表具有共同连接字段(a
),而另一个不同的领域(b
)
我试图提取结果集的id
和b
,那里既没有id
也不b
被复制。
我有一个SQL小提琴设置:http://www.sqlfiddle.com/#!9/208de/3/0
理想的结果应该是:
id | b
---+---
1 | 1
2 | 2
3 | 3
每个id
和b
值只出现一次(这只是他们在这里匹配的巧合,这是不能总是假设)。
谢谢
有什么可疑的。请查看http://www.w3schools.com/sql/trysql.asp?filename=trysql_select_distinct并尝试以下查询:SELECT DISTINCT City,Country FROM Customers; ' – Bramastic
它们在您的SQLFiddle中不匹配。如果你通过'a'加入,你最终会交叉加入。所以'id'中的每个值都与'b'中的每个值相加。此外,在你的sqlFiddle中,你有一个GROUP BY,但你只在其中包含'id'。这是一场灾难。 MySQl会选择它为每个不同的'id'找到的第一个'b'值,这肯定是坏的和错误的,令人厌恶,我不喜欢MySQl,因为它允许这样的事情。 – JNevill
只需详细说明,您在'a'上的连接将从'left'获取第一条记录,然后将'1'的'a'值匹配到'right'中每个'a'为'1'的记录。这是三个记录。然后,它将移动到'left'中的下一个记录,其中'a'又是'1',它将再次在'right'中找到三个匹配的记录,其中'a'为'1'。然后再次为第三条记录。您的结果集将包含9条记录。你最终得到一个笛卡尔产品([sqlfiddle](http://www.sqlfiddle.com/#!9/208de/44))。用什么逻辑从这9条记录到你想要的输出中的3条记录? – JNevill