从表A中选择某些列并插入表B

时间:2017-02-25 07:59:27

标签: android sql sqlite

尝试从CART表中选择某些数据列并将其添加到ORDER表中。我创建了一个插入顺序方法,它将从CART复制一些列并添加到ORDER表。但是抛出了一个错误,因为我在ORDER中有一个列是“product_stats”。而不是向CART添加“product_stats”,如何以这样的方式进行查询:从CART复制某些列时,ORDER中的product_stats将被忽略? 任何帮助,将不胜感激!

PS:我对SQL查询不是很熟悉。

ORDER和CART表:

 sqLiteHelper.queryData("CREATE TABLE IF NOT EXISTS cart (cart_id INTEGER PRIMARY KEY AUTOINCREMENT, product_image BLOG, product_name TEXT, product_stall TEXT, product_price TEXT)");

 sqLiteHelper.queryData("CREATE TABLE IF NOT EXISTS orderT (order_id INTEGER PRIMARY KEY AUTOINCREMENT, product_name TEXT, product_stall TEXT, product_price TEXT, product_stats TEXT)");

插入ORDER方法:

 public void insertOrder(){
    SQLiteDatabase database = this.getWritableDatabase();
    database.execSQL("insert into orderT select cart_id, product_name, product_stall, product_price from cart");
    database.close();
}

抛出错误:

Caused by: android.database.sqlite.SQLiteException: 4 values for 5 columns (code 1): , while compiling: insert into orderT (order_id, product_name, product_stall, product_price, product_stats) select cart_id, product_name, product_stall, product_price from cart

2 个答案:

答案 0 :(得分:0)

您应该在语句中指定列名,如下所示:

INSERT INTO table_name (column1,column2,column3,...)
    VALUES (value1,value2,value3,...);

通过指定列名,您可以省略您不想填写的列。

答案 1 :(得分:0)

您可以在查询中为product_stats设置默认值(例如,空):

database.execSQL("insert into orderT select cart_id, product_name, 
                  product_stall, product_price, '' as product_stats  
                  from cart");