![](/img/trans.png)
[英]How can I SELECT DISTINCT rows from two columns from the same table ignoring bidirectional similars?
[英]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.