簡體   English   中英

比較兩個不同列中sql中的行

[英]comparing rows in sql on two different columns

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

怎么得到這個?

假設您要加入沒有重復的列,這是迄今為止最常見的情況:

  • ABinner join給出A intersect B的結果,即維恩圖相交的內部。

  • 一個outer joinAB給出的結果A union B ,即維恩圖聯合的外部分。


例子:

假設您有兩個表,每個表都有一個列,數據如下:

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

請注意,(1,2)是A唯一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將為您提供AB A並集,即A所有行和B中的所有行。如果A中的某物在B中沒有對應的基准,則B部分為null,反之反之亦然。

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

嘗試使用group by子句,如下所示:

select min(id), address, retailer
from tab
group by address, retailer
select min(id) as id,address, retailer 
from table1 
group by address, retailer
order by id

您需要的查詢是:

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

這是來源

使用它:正在工作:

 SELECT * FROM `sampletable` GROUP BY address, retailer

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM