簡體   English   中英

如何合並同一張表中的三個“選擇不同”

[英]How do I combine three “select distinct” from same table

對於搜索功能,我想返回三種類型的結果,因此我要查詢三次。 最好將JOIN或UNION查詢合並為一個,但是如何..

string sql1 = "SELECT DISTINCT area, CHARINDEX(@ss, area) FROM rgmaplocation WHERE area LIKE '%' + @ss + '%' ORDER BY CHARINDEX(@ss, area) ";
string sql2 = "SELECT DISTINCT compound, CHARINDEX(@ss, compound) FROM rgmaplocation WHERE compound LIKE '%' + @ss + '%' ORDER BY CHARINDEX(@ss, compound) ";
string sql3 = "SELECT DISTINCT streetname, CHARINDEX(@ss, streetname) FROM rgmaplocation WHERE streetname LIKE '%' + @ss + '%' ORDER BY CHARINDEX(@ss, streetname)";

像這樣通過charindex表達式來組合結果並進行排序。

;WITH C(Loc, Idx) AS
(
  SELECT DISTINCT area, CHARINDEX('g', area) 
  FROM rgmaplocation 
  WHERE area LIKE '%g%' 
  UNION ALL
  SELECT DISTINCT compound, CHARINDEX('g', compound) 
  FROM rgmaplocation 
  WHERE compound LIKE '%g%' 
  UNION ALL
  SELECT DISTINCT streetname, CHARINDEX('g', streetname) 
  FROM rgmaplocation 
  WHERE streetname LIKE '%g%' 
)
SELECT Loc, Idx
FROM C
ORDER BY Idx

如果您不介意將區域,化合物和街道名稱混在一起,則Mikael Eriksson的解決方案很好。 如果您想將它們分開,請繼續

WITH C(No,Loc, Idx) AS
(
  SELECT DISTINCT 1,area, CHARINDEX('g', area) 
  FROM rgmaplocation 
  WHERE area LIKE '%g%' 
  UNION 
  SELECT DISTINCT 2,compound, CHARINDEX('g', compound) 
  FROM rgmaplocation 
  WHERE compound LIKE '%g%' 
  UNION 
  SELECT DISTINCT 3,streetname, CHARINDEX('g', streetname) 
  FROM rgmaplocation 
  WHERE streetname LIKE '%g%' 
)
SELECT No,Loc, Idx
FROM C
ORDER BY No,Idx

如您所說,使用UNION應該看起來像:

string sqlAll = string.Format( "{0} UNION {1} UNION {2}", sql1, sql2, sql3 );

暫無
暫無

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

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