如何在两组查询结果中查找公共行?

时间:2013-08-25 12:58:12

标签: c# sqlite

现在我有两个字符串查询:

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();
                }

            }
        }

现在,我想知道如何在这两个查询中获取公共行,以便在我的listView中显示它们;或者更好的是,有没有办法只做一个查询并获得所需的结果?

4 个答案:

答案 0 :(得分: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'

解释了INTERSECT关键字here

答案 1 :(得分: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'

只需组合where条件并使用一个查询代替AND子句(和括号以保持逻辑一致):

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

答案 2 :(得分: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

答案 3 :(得分: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')

如果您的意思是在两个查询中显示公共行以及查询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'