2个表的SQL查询

时间:2012-05-22 21:21:44

标签: sql select

有两个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

请帮忙。

5 个答案:

答案 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 Table1SELECT * 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;