现在我有两个字符串查询:
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中显示它们;或者更好的是,有没有办法只做一个查询并获得所需的结果?
答案 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'