Android Как определить запрос SQLite «многие ко многим» - PullRequest
0 голосов
/ 02 марта 2019

У меня есть две таблицы, первая содержит категорию, пункты меню и количество, которое я продал в магазине.Так, например,

Table A
CATEGORY X MENU          X QUANTITY
Chicken  x ChickenStew   x 7 
Beef     x Stew          x 10
Fish     x FishStew      x 8 
Chicken  X Chicken Stew  x 5
Fish     X Fish Stew     x 2

У меня есть вторая таблица, которая определяет спецификацию для каждого пункта меню, как этот

table B
MENU          X  BILL_OF_MATERIAL
Chicken Stew  x  chicken
Chicken Stew  x  sauce
Chicken Stew  x  salt

Я хочу запрос SQLite, который будет копировать каждую категорию, менюи Количество в первой таблице А в третью таблицу С и соответствуют соответствующему перечню материалов из таблицы В. Так что, если у меня есть один пункт меню и Количество в таблице А, в перечне материалов которого есть 11 пунктов в таблице В. Когда язапустите запрос, который он скопирует в таблицу C 11 пунктов, которые будут пунктом меню, его количеством и 11 строкой с спецификацией

Table C
    Category x MenuItem X Quantity x Bill of Material

, это то, что у меня было, но, похоже, не работает

UPDATE OE_Sales_Activity SET RawMatType = (SELECT RawMaterialPortion FROM Define_Raw_Material_Portioning where Define_Raw_Material_Portioning.MenuItemPortion =OE_Sales_Activity.FP_SKU)

1 Ответ

0 голосов
/ 02 марта 2019

Я полагаю, что следующее может быть в соответствии с тем, что вы хотите (в соответствии с

Я хочу запрос SQLite, который будет копировать каждую категорию, меню и количество в первой таблице Aв третью таблицу C и сопоставьте соответствующий перечень материалов из таблицы B.

): -

INSERT INTO tablec 
SELECT category, tablea.menu, quantity, bill_of_material
FROM tablea JOIN tableb on tableb.menu = tablea.menu;
  • обратите внимание на имена таблиц в соответствии с вашим примеромdata.

Основываясь на слегка измененном наборе примеров данных (больше данных в таблице), учтите следующее: -

-- DROP tables (note tableb as it references table should be dropped first)
DROP TABLE IF EXISTS tableb;
DROP TABLE IF EXISTS tablea;
DROP TABLE IF EXISTS tablec;
-- Create the tables
CREATE TABLE IF NOT EXISTS tablea (category TEXT, menu TEXT UNIQUE, quantity INTEGER);
CREATE TABLE IF NOT EXISTS tableb (menu TEXT REFERENCES tablea(menu), bill_of_material);
CREATE TABLE IF NOT EXISTS tablec (category, menu, quatity, bom);
-- Populate the tables, tablea and tableb
INSERT INTO tablea VALUES
    ('Chicken','ChickenStew',7),('Beef','Stew',10),('Fish','FishStew',8),('Chicken','Chicken Stew',5),('Fish','Fish Stew',2);
;
INSERT INTO tableb VALUES
    ('Chicken Stew','chicken'),('Chicken Stew','sauce'),('Chicken Stew','salt'),
    ('ChickenStew','chicken legs'),('ChickenStew','chicken stock'),('ChickenStew','Leek'),
    ('FishStew','Fish'),('FishStew','fish stock'),('FishStew','onion')
;
SELECT * FROM tablea; -- <<<<<<<<<< result 1
SELECT * FROM tableb; --<<<<<<<<<< result 2
DELETE FROM tablec; -- <<<<<<<<<< Clear tablec >>>>>>>>>
-- populate tablec according to tablea and tableb
INSERT INTO tablec 
SELECT category, tablea.menu, quantity, bill_of_material
FROM tablea JOIN tableb on tableb.menu = tablea.menu;

SELECT * FROM tablec; -- <<<<<<<<<< result 3

Таблица выше заполняется следующим образом: -

enter image description here

и tableb (с дополнительными данными для более подробного примера): -

enter image description here

, и tablec заполняется в соответствии с таблицами и tablec: -

enter image description here

  • Примечаниечто для использования внешнего ключа (ССЫЛКИ) вам необходимо специально включить поддержку внешнего ключа.
    • Выше все будет работать без включенной поддержки чужих клавиш.Однако в таблицу можно добавить строку, в которой столбец меню (например, FishBroth) не является элементом меню в таблице.

Не знаюполагайте, что вы хотите ОБНОВИТЬ, по крайней мере, без подходящего предложения WHERE, иначе ВСЕ СТРОКИ будут обновлены, установив для столбца RawMatType всех строк одно и то же значение.

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