2012-09-18 49 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

相關問題