Как мне объединить три «выбрать отличные» из одной таблицы - PullRequest
0 голосов
/ 16 октября 2011

Для функции поиска я хочу вернуть три типа результатов, поэтому я запрашиваю три раза.Вероятно, было бы лучше присоединиться или объединить запросы в один, но как ..

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)";

Ответы [ 3 ]

4 голосов
/ 16 октября 2011

Примерно так, чтобы объединить результат и выполнить порядок по выражению 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
3 голосов
/ 16 октября 2011

Решение Микаэля Эрикссона хорошо, если вы не возражаете, если перепутаете площадь, состав и название улицы.Если вы хотите оставить их отдельно, вы идете

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
1 голос
/ 16 октября 2011

Использование UNION , как вы сказали, должно выглядеть так:

string sqlAll = string.Format( "{0} UNION {1} UNION {2}", sql1, sql2, sql3 );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...