-3

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

等等

请帮忙。

4

5 回答 5

3

(我假设您的示例数据不代表您的问题,因为它不会导致重复。)

您可以使用DISTINCT关键字来消除重复项,如下所示:

select distinct t1.ID,
    t1.field1,
    t2.field2
from table1 t1
inner join table2 t2 on t1.field1 = t2.field1;

示例 SQL Fiddle 在此处说明问题:http ://sqlfiddle.com/#!2/ed198/1

此处说明的解决方案:http ://sqlfiddle.com/#!2/ed198/2

于 2012-05-22T21:23:03.397 回答
3

您的方法(尽管您的 SQL 丑陋且难以阅读)应该可行。

在线查看它:sqlfiddle

您的问题是您的一个输入表中有重复项。尝试SELECT * FROM Table1or SELECT * FROM Table2,您可能会看到如下内容:

ID | field1
1  | a
2  | b
1  | a
2  | b

我建议:

  • 从表中删除重复的行。
  • 在您的字段上添加唯一索引ID以防止它再次发生。
于 2012-05-22T21:24:41.773 回答
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;
于 2012-05-22T21:23:33.163 回答
0

尝试使用DISTINCT来得到你的结果,我也建议你的表使用 JOIN 语法,而不是表名之间的逗号。

SELECT DISTINCT t1.ID, t1.field1, t2.field2 
FROM table1 t1
INNER JOIN table2 t2 
    ON t1.field1=t2.field1;
于 2012-05-22T21:23:58.483 回答
0

您将不得不在该查询的前面抛出一个 SELECT DISTINCT。SELECT DISTINCT t1.ID, t1.field1, t2.field2 FROM table1 t1, table2 t2 WHERE t1.field1=t2.field1;

于 2012-05-22T21:25:15.517 回答