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 相同地址但不是同一零售商的ID。
怎么算这个?
答案 0 :(得分:2)
假设您正在加入没有重复的列,这是目前最常见的情况:
inner join
A
和B
给出A intersect B
的结果,即维恩图交集的内部。
outer join
A
和B
给出了A 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
强>:
left 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
强>:
full outer join
将为您提供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
答案 1 :(得分:2)
尝试使用group by
子句如下:
select min(id), address, retailer
from tab
group by address, retailer
答案 2 :(得分:0)
select min(id) as id,address, retailer
from table1
group by address, retailer
order by id
答案 3 :(得分:0)
您需要的查询是:
SELECT min(id), address, retailer
FROM table1 AS t1
group by address, retailer
order by address
这是source
答案 4 :(得分:0)
使用它:它正在工作:
SELECT * FROM `sampletable` GROUP BY address, retailer