2012-09-18 53 views
1

表中有一列称为服务位置(合同)。我必须显示服务位置与表中任何其他行匹配的所有行。选择表中具有相同数据的特定列中的两行

Table Example 

A B C 
1 2 3 
3 2 1 
2 5 3 

我需要一个查询,第一行和第二行将根据第二列的比较返回。我假设我将需要使用HAVING COUNT(B)> 1

我想出了这个

SELECT `contract_number` 
FROM `contracts` 
WHERE `import_id` = 'fe508764-54a9-41f7-b36e-50ebfd95971b' 
GROUP BY `service_location_id` 
HAVING COUNT(`service_location_id`) >1 

但它不会产生什么,我正好需要的。

+1

你的解释和示例表让我头晕目眩。你能否试着关联一下哪个服务位置应该与之匹配? – Kermit

+0

从您的查询中删除WHERE'import_id' ='fe508764-54a9-41f7-b36e-50ebfd95971b' 并使用您自己的解决方案重试。问题可能仅限于你的where子句。否则你的查询是好的,并会给出你需要的结果。 – Sami

+0

如果表中的两行或多行具有相同的服务位置,则查询应返回所有这些行。 –

回答

2

Having将做到这一点,但你需要使用这样的

SELECT * 
FROM Contracts 
     INNER JOIN 
     ( SELECT B 
      FROM Contracts 
      GROUP BY B 
      HAVING COUNT(*) > 1 -- MORE THAN ONE ROW WITH THE SAME VALUE 
     ) dupe 
      ON dupe.B = Contracts.B 

根据您的索引,你可能会发现自连接进行虽好:

SELECT DISTINCT t1.* 
FROM contracts t1 
     INNER JOIN contract` t2 
      ON t1.B = t2.B 
      AND t1.A <> t2.A 
1

SELECT * FROM sheet1 WHERE C IN(

SE LECT Csheet1 GROUP BY C HAVING COUNT(C)> 1 ) ORDER BY C LIMIT 0,5000

相关问题