Как объединить две разные таблицы в одну таблицу? - PullRequest
0 голосов
/ 13 октября 2019

Я создаю Android-Base Point of Sale System, и я изо всех сил пытаюсь объединить две таблицы, я хочу, чтобы Table Foods и Table Drinks были объединены в меню Table.

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

1 Ответ

0 голосов
/ 13 октября 2019

Вы можете объединить таблицы, используя UNION - см. Составные операторы выбора примерно на 3/4 вниз между SELECTS

 SELECT * FROM table_Food UNION SELECT * FROM table_drinks

или

SELECT * FROM table_Food UNION ALL SELECT * FROM table_drinks

Оба будут работать одинаково, если только у вас не было напитка и еды с одинаковым названием, одинаковой ценой и одинаковым идентификатором. Без ВСЕХ повторяющихся строк будут опущены. Таким образом, UNION ALL безопаснее.

  • Выше предполагается, что вы хотите, чтобы все столбцы.
  • Обратите внимание, что количество столбцов для каждого выбора должно совпадать
    • , но вы можете легконапример, SELECT *,1 as extracolumn FROM table_Food добавляет новый столбец к результату

IF вам нужно просто использовать одну таблицу table_data затем для загрузки данных из таблицы table_food и таблицы table_drinks в table_Data, которые вы можете использовать: -

INSERT INTO table_data (name,price) SELECT name,price FROM table_Food UNION ALL SELECT name,price FROM table_Drinks;
  • идентификаторы опускаются как первичный ключ, если значениябыли бы такими же, то вышеперечисленное потерпит неудачу из-за УНИКАЛЬНОГО конфликта ограничений

  • Скорее всего, будут двойные идентификаторы, поскольку у вас есть INTEGER PRIMARY KEY для столбца id. Это делает столбец псевдонимом столбца rowid (скрытый столбец), который имеет атрибут генерации значения, уникального для таблицы: сначала 1, затем 2, затем 3 (но не гарантируется). Ключевое слово AUTOINCREMENT добавляет дополнительный поворот в том, что уникальное значение должно быть больше, чем любое существующее или использованное.

Если вы хотите временно объединить все 3 таблицы, то вы можете использовать:-

SELECT * FROM table_Food UNION ALL SELECT * FROM table_drinks UNION ALL SELECT * FROM table_Data;

Если вы хотите объединить все три и знать, из какой таблицы вы можете использовать: -

SELECT *,'Food' FROM table_Food UNION ALL SELECT *,'Drinks' FROM table_drinks UNION ALL SELECT *,'Menu' FROM table_Data;

Демонстрация SQL Fiddle из вышеприведенного

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...