0
id address retailer
1   A        11
2   A         11
3   A         11
4   A         12
5   A         13
6   B         12
7   B         12
8   B         13

我的输出应该是

id address retailer
1   A        11
4   A         12
5   A         13
6   B         12
8   B         13

即我的查询应该返回具有相同地址但不同零售商的ID。

如何得到这个?

4

5 回答 5

2

假设您要加入没有重复的列,这是迄今为止最常见的情况:

  • An inner joinof AandB给出 的结果A intersect B,即维恩图交集的内部部分。

  • outer join和给出 的结果A,即维恩图联合的外部部分。BA union B


例子:

假设您有两个表,每个表只有一列,数据如下:

A    B
-    -
1    3
2    4
3    5
4    6

请注意,(1,2) 对 是唯一的A,(3,4) 是常见的,而 (5,6) 对 是唯一的B

Inner join

使用inner join任一等效查询给出两个表的交集,即它们共有的两行。

select * 
from a 
INNER JOIN b on a.a = b.b;

select a.*,b.*  
from a,b 
where a.a = b.b;

a | b
--+--
3 | 3
4 | 4

Left outer join

Aleft outer join将给出 A 中的所有行,以及 B 中的任何常见行。

select * 
from a 
LEFT OUTER JOIN b on a.a = b.b;
select a.*,b.*  
from a,b 
where a.a = b.b(+);

a |  b  
--+-----
1 | null
2 | null
3 |    3
4 |    4

Full outer join

Afull outer join将为您提供 and 的A并集B,即 A 中的所有行和 B 中的所有行。如果 A 中的某些内容在 B 中没有对应的数据,则 B 部分为空,反之亦然。

select * 
from a 
FULL OUTER JOIN b on a.a = b.b;

 a   |  b  
-----+-----
   1 | null
   2 | null
   3 |    3
   4 |    4
null |    6
null |    5
于 2013-03-19T10:46:23.963 回答
2

尝试使用group by如下子句:

select min(id), address, retailer
from tab
group by address, retailer
于 2013-03-19T10:49:11.247 回答
0
select min(id) as id,address, retailer 
from table1 
group by address, retailer
order by id
于 2013-03-19T10:50:03.213 回答
0

您需要的查询是:

SELECT min(id), address, retailer
FROM table1 AS t1
group by address, retailer
order by address

这是来源

于 2013-03-19T10:53:33.290 回答
0

使用这个:它正在工作:

 SELECT * FROM `sampletable` GROUP BY address, retailer
于 2013-03-19T10:53:42.223 回答