1

我需要从 2 个表中选择几列:

Tab1
| Col1 | Col2 | Col3

Tab2
| Col1 | Col4 | Col5

这是我的查询:

SELECT A.*,B.Col4 
FROM Tab1 A,Tab2 B 
WHERE A.Col1=B.Col1 
AND A.Col2=='XXX'
AND A.Col3>5;

但是,此查询以某种方式连接了两个表并复制了一些行。它有什么问题?

预期的结果是这样的:

Tab3
| Col1 | Col2 | Col3 | Col4
4

4 回答 4

1

您应该使用=而不是==. 如果 col1 是 Tab1 的主键,col2 是 Tab2 的主键,并且 Tab1 和 Tab2 之间的关系是一对一的,则无法复制记录。

SELECT A.*,B.Col4 
FROM Tab1 A,Tab2 B 
WHERE A.Col1=B.Col1 
AND A.Col2 ='XXX'
AND A.Col3>5;
于 2012-09-12T10:03:50.763 回答
1

您发布的查询没有问题,但如果问题是有

重复一些行

如您所述,然后使用DISTINCT

SELECT DISTINCT A.*, B.Col4 
FROM Tab1 A, Tab2 B 
WHERE A.Col1 = B.Col1 
AND A.Col2 = 'XXX'
AND A.Col3 > 5;

或其他JOIN语法:

SELECT DISTINCT A.*,B.Col4 
FROM Tab1 A 
INNER JOIN Tab2 B ON A.Col1 = B.Col1 
WHERE A.Col2 ='XXX'
  AND A.Col3 > 5;
于 2012-09-12T10:05:22.460 回答
1

SQL INNER w3schools

使用那个web端来练习和理解inner,left,right join。多个查询....

于 2012-09-12T11:25:12.123 回答
0

使用连接

SELECT A.*,B.Col4 
FROM Tab1 A JOIN Tab2 B ON A.Col1=B.Col1 
WHERE A.Col2='XXX'
AND A.Col3>5;

请注意,在 sql 中没有 ==(双等号)来检查相等性,而是使用单(=)

于 2012-09-12T10:03:06.360 回答