SQL ORACLE - Таблица данных, в где пункт

В настоящее время у меня есть вызов sql, возвращая набор данных из базы данных MSSQL, и я хочу взять столбец от тех данных, и идентификатор возврата базировался от того столбца от базы данных ORACLE. Я могу сделать этого за один раз, но это требует множественных вызовов, я задаюсь вопросом, может ли это быть сделано с одним вызовом.

String sql=String.Format(@"Select DIST_NO
    FROM DISTRICT
    WHERE DIST_DESC = '{0}'", row.Table.Rows[0]["Op_Centre"].ToString());

Выше строка, которую я использую для возврата одного идентификатора за один раз. Я знаю эти {0}, может использоваться для форматирования значения в строку и возможно существует способ сделать это с таблицей данных.

Также для использования нескольких значений в, где пункт это было бы:

String sql=String.Format(@"Select DIST_NO
   FROM DISTRICT
   WHERE DIST_DESC in ('{0}')", row.Table.Rows[0] ["Op_Centre"].ToString());

Хотя я понимаю, что все это может быть сделано, я задаюсь вопросом, существует ли простой способ добавить, что все это к sql представляет в виде строки в одном вызове.

Поскольку я пишу это, я понимаю, что мог распасться на части, строка затем просто добавляют, что каждая строка оценивает строке SQL в "ГДЕ DIST_DESC В (" пункт...

Мне все еще любопытно видеть, существует ли иначе, хотя, и потому что кто-то еще может столкнуться с этой проблемой, я отправлю решение, если я разрабатываю тот.

Заранее спасибо.

1
задан Gage 8 July 2010 в 19:59
поделиться

2 ответа

Наиболее независимый от РСУБД подход, который вы могли бы сделать, - это создать временную таблицу. Затем просто запросите: выберите * из района, где находится dist_desc (выберите dist_desc из temp_table)

В Oracle есть решение http://forums.oracle.com/forums/thread.jspa?threadID= 930372 , но у меня в коробке нет Oracle, поэтому я не могу попробовать, как он будет работать в .NET.

Пробовали это в Postgresql http://fxjr.blogspot.com/2009/05/npgsql-tips-using-in-queries-with.html , имеют очень удобную поддержку для сравнения значения с list

Если вы выберете метод динамических запросов, попробуйте следующее:

String sql=String.Format(@"Select DIST_NO
FROM DISTRICT
WHERE DIST_DESC IN ({0})", 
  string.Join( ",",
      ds.Tables[0].Select()
      .Select(r => "'" + (string)r["Op_Centre"] + "'").ToArray() ) // string.Join
  ); // string.Format
1
ответ дан 3 September 2019 в 00:36
поделиться

K Я понимаю, что бессмысленно задавать вопрос, а потом самому на него отвечать, но задав вопрос, я понял ответ.

String sql = "Select DIST_NO FROM DISTRICT WHERE DIST_DESC in ('" +ds.Tables[0].Rows[0]["Op_Centre"].ToString()+"'";

for (int i = 1; i < ds.Tables[0].Rows.Count;i++ )

{ sql +=",'"+ds.Tables[0].Rows[i]["Op_Centre"].ToString()+"'";

} sql += ")";

Мне все еще интересно узнать, есть ли лучший способ...

1
ответ дан 3 September 2019 в 00:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: