Android 如何将两个不同的表合并到一个表中?
我正在制作一个android销售基点系统,我正在努力组合两张桌子,我希望桌子上的食物和饮料在桌子菜单中组合Android 如何将两个不同的表合并到一个表中?,android,android-sqlite,Android,Android Sqlite,我正在制作一个android销售基点系统,我正在努力组合两张桌子,我希望桌子上的食物和饮料在桌子菜单中组合 public static final String DATABASE_NAME = "FOODs.db"; //FOODs Tables name public static final String TABLE_FOODS = "table_Food"; public static final String TABLE_DRINKS = "table_drinks"; public s
public static final String DATABASE_NAME = "FOODs.db";
//FOODs Tables name
public static final String TABLE_FOODS = "table_Food";
public static final String TABLE_DRINKS = "table_drinks";
public static final String TABLE_MENU = "table_data";
//FOODs Table Columns name
private static final String COL_1 = "Primary ID";
private static final String COL_2 = "NAME";
private static final String COL_3 = "PRICE";
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
String CreateTableMains = "CREATE TABLE " + TABLE_FOODS + " (ID INTEGER PRIMARY KEY AUTOINCREMENT, " +
" NAME TEXT, PRICE TEXT)";
db.execSQL(CreateTableMains);
String CreateTableDrinks = "CREATE TABLE " + TABLE_DRINKS + " (ID INTEGER PRIMARY KEY AUTOINCREMENT, " +
" NAME TEXT, PRICE TEXT)";
db.execSQL(CreateTableDrinks);
String CreateTable = "CREATE TABLE " + TABLE_MENU + " (ID INTEGER PRIMARY KEY AUTOINCREMENT, " +
" NAME TEXT, PRICE TEXT)";
db.execSQL(CreateTable);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + TABLE_FOODS);
db.execSQL("DROP TABLE IF EXISTS " + TABLE_DRINKS);
db.execSQL("DROP TABLE IF EXISTS " + TABLE_MENU);
可以使用中间选择合并表
SELECT * FROM table_Food UNION SELECT * FROM table_drinks
或
除非你碰巧有一种饮料和食物有相同的名字、相同的价格和相同的id,否则这两种方法都是一样的。没有所有重复的行将被省略。如此一来,一切都更安全了
- 以上假设您需要所有列
- 注意:每次选择的列数必须匹配
- 但是你可以很容易地解决这个问题,例如,
在结果中添加了一个新的列SELECT*,1因为table_Food的extracolumn
- 但是你可以很容易地解决这个问题,例如,
INSERT INTO table_data (name,price) SELECT name,price FROM table_Food UNION ALL SELECT name,price FROM table_Drinks;
SELECT *,'Food' FROM table_Food UNION ALL SELECT *,'Drinks' FROM table_drinks UNION ALL SELECT *,'Menu' FROM table_Data;
- id作为主键被省略。如果值相同,则由于唯一约束冲突,上述操作将失败
- 很可能会有重复的id,因为id列有整数主键。这使该列成为rowid列(隐藏列)的别名,该列具有生成表唯一值的属性,该值最初为1,然后为2,然后为3(但不保证)。AUTOINCREMENT关键字增加了一个额外的扭曲,即唯一值必须大于现有或已使用的任何值
SELECT * FROM table_Food UNION ALL SELECT * FROM table_drinks UNION ALL SELECT * FROM table_Data;
如果您想合并这三个表,并知道可以使用哪个表:-
INSERT INTO table_data (name,price) SELECT name,price FROM table_Food UNION ALL SELECT name,price FROM table_Drinks;
SELECT *,'Food' FROM table_Food UNION ALL SELECT *,'Drinks' FROM table_drinks UNION ALL SELECT *,'Menu' FROM table_Data;
您可以使用
UNION
操作符将不同的查询合并到一个结果集中。因此,如果我使用UNION,那么所有来自餐桌食品和餐桌饮料的数据(如名称和价格)都会合并到餐桌菜单中?不,它们会临时合并到结果集中(光标)。Oops遗漏了该位。将修改答案为cover.public Cursor showMenuData(){SQLiteDatabase db=this.getWritableDatabase();Cursor data=db.rawQuery(“SELECT*FROM”+表格食物+“UNION ALL SELECT*FROM”+表格饮料);返回数据;}我有一个错误,我想我没有完全正确地声明UNION。您遗漏了表名和UNION之间的一个空格。但是,答案会更新,以将所有行放在菜单表中。那么,是否有可能添加外部ID,以便在我合并到表菜单中时使所有数据具有不同的ID?