2013-08-25 6 views
0

Сейчас у меня есть две строки запроса:Как найти общие строки в двух наборах результатов запроса?

SELECT * FROM hmdb WHERE shamsidate MATCH '1376/05/24 1385/11/12'

и

SELECT * FROM hmdb WHERE hmdb MATCH 'content:red OR keyword:red v_other:true'

и это, как я показать результаты каждого из них:

  public void searchRecords() 
      { 
      SQLiteConnection m_dbConnection; 
      m_dbConnection = new SQLiteConnection("Data Source=hmdb.sqlite;version=3;"); 

      try 
      { 
       m_dbConnection.Open(); 
       SQLiteDataAdapter db = new SQLiteDataAdapter(queryString, m_dbConnection); 
       DataTable dt = new DataTable("hmdb"); 
       db.Fill(dt); 
       listView1.ItemsSource = dt.DefaultView; 
      } 
      catch (Exception e) 
      { 
       string ex = e.ToString(); 
       System.Windows.MessageBox.Show(ex); 
      } 
      finally 
      { 
       if (m_dbConnection != null) 
       { 
        m_dbConnection.Close(); 
        m_dbConnection.Dispose(); 
       } 

      } 
     } 

Теперь я хотел знать, как я могу получить общие строки в обоих этих запросах в orde r, чтобы показать их в моем спискеView; или еще лучше, есть ли способ сделать только один запрос и получить желаемый результат?

+0

по общему строк вы имеете в виду только общие для обоих запросов? Затем используйте 'AND'. Если вы имеете в виду отображение общих строк в обоих запросах вместе с строками, которые запрашивают только 1 совпадение, и только один запрос 2 - используйте 'UNION' – Slartibartfast

ответ

2

Я думаю, что вы ищете:

SELECT * FROM hmdb WHERE shamsidate MATCH '1376/05/24 1385/11/12' 
INTERSECT 
SELECT * FROM hmdb WHERE hmdb MATCH 'content:red OR keyword:red v_other:true' 

Интерсекта ключевое слово объясняется here

+0

не дает никаких результатов (без ошибок); он должен вернуть 3 результата! – user2126878

+0

Можете ли вы показать данные в своей базе данных. Что возвращает каждый запрос? – dcaswell

+0

На самом деле связь INTERSECT прекрасно описала ответ. Благодаря! – user2126878

0

У вас есть два запроса:

SELECT * FROM hmdb WHERE shamsidate MATCH '1376/05/24 1385/11/12' 
SELECT * FROM hmdb WHERE hmdb MATCH 'content:red OR keyword:red v_other:true' 

Просто совмещают где условия и использовать один запрос вместо используя AND положение (и круглые скобки, чтобы сохранить логику последовательной):

SELECT * FROM hmdb 
WHERE shamsidate MATCH '1376/05/24 1385/11/12' 
     AND (hmdb MATCH 'content:red OR keyword:red v_other:true') 
+0

никаких результатов, без ошибок. – user2126878

0

Я думаю, лучше всего было бы иметь условие and в запросах.

SELECT * FROM hmdb WHERE shamsidate MATCH '1376/05/24 1385/11/12' and hmdb MATCH 'content:red OR keyword:red v_other:true'

Если бы это были две разные таблицы, вы могли бы использовать Joins.

+0

никаких результатов, без ошибок. – user2126878

+1

Получают ли индивидуальные запросы результаты? –

+0

Мне очень жаль, но в моем вопросе есть проблема; мой первый запрос должен был быть SELECT * FROM hmdb WHERE shamsidate MATCH '1376/04/22' UNION SELECT * FROM hmdb WHERE shamsidate MATCH '1376/04/21' Должен ли я опубликовать новый вопрос или отредактировать его? – user2126878

0

Если по общему строк вы имеете в виду только общие для обоих запросов? Затем используйте И.

SELECT * FROM hmdb WHERE shamsidate MATCH '1376/05/24 1385/11/12' 
AND (hmdb MATCH 'content:red OR keyword:red v_other:true') 

Если вы имеете в виду отображение общих строк в обоих запросах вместе со строками, которые запрашивают 1 матчи в одиночку и запроса 2 матча в одиночку - использование UNION -

SELECT * FROM hmdb WHERE shamsidate MATCH '1376/05/24 1385/11/12' 
UNION 
SELECT * FROM hmdb WHERE hmdb MATCH 'content:red OR keyword:red v_other:true' 
Смежные вопросы