有两个SQL表:
Table1
ID | field1
1 | a
2 | b
Table2
field1 | field2
a | 111
a | 222
b | 333
b | 444
b | 555
我需要获得以下Table3
:
ID | field1 | field2
1 | a | 111
1 | a | 222
2 | b | 333
2 | b | 444
2 | b | 555
我厌倦了运行这样的SQL查询:
SELECT t1.ID, t1.field1, t2.field2 FROM table1 t1, table2 t2 WHERE t1.field1=t2.field1;
但结果我收到了重复的条目,就像这样
ID | field1 | field2
1 | a | 111
1 | a | 111
2 | a | 222
2 | a | 222
等
请帮忙。
答案 0 :(得分:3)
(我假设您的样本数据不代表您的问题,因为它不会导致重复。)
您可以使用DISTINCT
关键字来消除重复项,例如:
select distinct t1.ID,
t1.field1,
t2.field2
from table1 t1
inner join table2 t2 on t1.field1 = t2.field1;
示例SQL小提琴以在此处说明问题:http://sqlfiddle.com/#!2/ed198/1
此处说明的解决方案:http://sqlfiddle.com/#!2/ed198/2
答案 1 :(得分:3)
你的方法(尽管你的SQL难看并且难以阅读)应该可行。
查看在线工作:sqlfiddle
您的问题是您的某个输入表中存在重复项。试试SELECT * FROM Table1
或SELECT * FROM Table2
,你可能会看到类似的内容:
ID | field1
1 | a
2 | b
1 | a
2 | b
我建议:
ID
字段上添加唯一索引,以防止再次发生。答案 2 :(得分:0)
使用GROUP BY
删除结果中的重复项。
SELECT t1.ID, t1.field1, t2.field2
FROM table1 t1, table2 t2
WHERE t1.field1=t2.field1
GROUP BY t1.ID, t1.field1, t2.field2;
答案 3 :(得分:0)
尝试使用DISTINCT
来获取结果,我也建议您使用表格的JOIN语法而不是表名之间的逗号。
SELECT DISTINCT t1.ID, t1.field1, t2.field2
FROM table1 t1
INNER JOIN table2 t2
ON t1.field1=t2.field1;
答案 4 :(得分:0)
您将不得不在该查询的前面抛出SELECT DISTINCT。 SELECT DISTINCT t1.ID,t1.field1,t2.field2 FROM table1 t1,table2 t2 WHERE t1.field1 = t2.field1;