简体   繁体   English

在SQlite中使用SQL原始查询来联接表

[英]Using SQL raw query in SQlite for joining tables

I have three tables(IncidentCategory, IncidentQuestion, IncidentOption) and in which I need to fire one join query to arrange and select some data. 我有三个表(IncidentCategory,IncidentQuestion,IncidentOption),我需要在其中触发一个联接查询来安排和选择一些数据。 For same, some SQL Server developers have written one query like below: 同样,一些SQL Server开发人员编写了一个查询,如下所示:

SERVER QUERY 服务器查询

SELECT * FROM [IncidentQuestion] AS IQ WHERE IQ.[IncidentCategoryId]=27 AND  
IQ.[IsOption]=0 AND (SELECT COUNT(IO.[Id]) FROM [dbo]. [IncidentOption] AS 
IO WHERE IO.[IncidentQuestionId]=IQ.[Id])<>0 ORDER BY IQ.[OrderId] ASC;

DECLARE @False BIT; SET @False=0;SELECT IP.*,COALESCE(IV.[Id], 0) AS    
[IncidentValueId],COALESCE(IV.[IsChecked], @False) AS [IsChecked],IV.
[Value],IV.IncidentId FROM [IncidentOption] AS IP LEFT JOIN (SELECT * FROM 
[IncidentValue] WHERE [IncidentId]=0) AS IV ON IP.[Id]=IV.[IncidentOptionId] 
WHERE IP.[IncidentQuestionId]=68 ORDER BY IP.[OrderId] ASC;

In my app, I have created the tables with same column names as in server. 在我的应用程序中,我创建了具有与服务器相同列名的表。

IncidentQuestion DbHelper: IncidentQuestion DbHelper:

private static final String INCIDENT_QUESTION_TABLE = "IncidentQuestionTable";
private static final String ID = "_id";
private static final String SERVER_ID = "Id";
private static final String CONTRACT_TYPE_ID = "ContractTypeId";
private static final String INCIDENT_CATAGORY_ID = "IncidentCategoryId";
private static final String QTEXT = "QText";
private static final String TYPE = "Type";  
private static final String ORDER_ID = "OrderId";
private static final String IS_MANDATORY = "IsMandatory";
private static final String IS_OPTION = "IsOption";

private static final int DATABASE_VERSION = 1;
private static final String DATABASE_NAME = "IncidentQuestion";

private final Context context;
private SQLiteDatabase ourDatabase;
private DbHelper ourHelper;

public class DbHelper extends SQLiteOpenHelper {

    public DbHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);

    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        String locationQuery = "CREATE TABLE " + INCIDENT_QUESTION_TABLE + " ("
                + ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
                + SERVER_ID + " TEXT NOT NULL, " + CONTRACT_TYPE_ID
                + " TEXT NOT NULL, " + INCIDENT_CATAGORY_ID
                + " TEXT NOT NULL, " + QTEXT
                + " TEXT NOT NULL, " + TYPE
                + " TEXT NOT NULL, " + ORDER_ID
                + " TEXT NOT NULL, " + IS_MANDATORY
                + " TEXT NOT NULL, " + IS_OPTION + " TEXT NOT NULL);";

        db.execSQL(locationQuery);      

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS " + INCIDENT_QUESTION_TABLE);
        onCreate(db);

    }

}

IncidentOption DbHelper: IncidentOption DbHelper:

private static final String INCIDENT_OPTION_TABLE = "IncidentOptionTable";
private static final String ID = "_id";
private static final String SERVER_ID = "Id";
private static final String INCIDENT_QUESTION_ID = "IncidentQuestionId";
private static final String OPTION_TEXT = "OptionText";
private static final String ORDER_ID = "OrderId";
private static final String PARENT_ID = "ParentId";

private static final int DATABASE_VERSION = 1;
private static final String DATABASE_NAME = "IncidentOption";

private final Context context;
private SQLiteDatabase ourDatabase;
private DbHelper ourHelper;

public class DbHelper extends SQLiteOpenHelper {

    public DbHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);

    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        String locationQuery = "CREATE TABLE " + INCIDENT_OPTION_TABLE + " ("
                + ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
                + SERVER_ID + " TEXT NOT NULL, "
                + INCIDENT_QUESTION_ID + " TEXT NOT NULL, " + OPTION_TEXT
                + " TEXT NOT NULL, " + ORDER_ID
                + " TEXT NOT NULL, " + PARENT_ID + " TEXT NOT NULL);";

        db.execSQL(locationQuery);      

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS " + INCIDENT_OPTION_TABLE);
        onCreate(db);

    }

}

All Select, Insert, Create, Delete query are working perfectly, I am unable to convert and fore the server query in my local db. 所有“选择”,“插入”,“创建”,“删除”查询均正常运行,我无法在本地数据库中转换和预见服务器查询。 Can please any one help me to find out the way that how I will write the server query in my local db OR how I will write some query which will work like the server query. 能否请任何人帮助我找出如何在本地数据库中编写服务器查询的方式,或者如何编写类似于服务器查询的查询方式。 Suggestions are mostly appreciable. 建议大多是可取的。

SQLite supports [brackets] for compatibility with SQL Server; SQLite支持[括号]以与SQL Server兼容。 you don't need to remove them. 您无需删除它们。

SQLite has no DECLARE. SQLite没有DECLARE。 In the query shown, False is the constant zero (which is also how SQLite handles boolean values); 在所示的查询中, False是常数零(这也是SQLite处理布尔值的方式); just drop the DECLARE and SET, and replace @False with 0 . 只需删除DECLARE和SET,然后将@False替换为0

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM