android - Android 如何定义多对多 SQLite 查询
问题描述
我有两个表,第一个包含类别、菜单项和我在商店出售的数量。所以例如
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 查询,它将第一个表 A 中的每个类别、菜单和数量复制到第三个表 C 中,并匹配表 B 中的相应物料清单。因此,如果我在表 A 中有一个菜单项和数量,其中有 11表 B 中的物料清单中的项目。当我运行查询时,它将复制到表 C 中的 11 个项目,这将是菜单项、其数量和带有 BOM 的 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)
解决方案
我相信以下内容可能符合您想要的内容(根据
我想要一个 SQLite 查询,它将第一个表 A 中的每个类别、菜单和数量复制到第三个表 C 中,并匹配表 B 中的相应物料清单。
):-
INSERT INTO tablec
SELECT category, tablea.menu, quantity, bill_of_material
FROM tablea JOIN tableb on tableb.menu = tablea.menu;
- 根据您的示例数据记下表名。
基于稍微修改的一组示例数据(表b中的更多数据)考虑以下内容:-
-- 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
以上将表格填充为:-
和 tableb (带有更全面示例的附加数据)为:-
并且 tablec 根据 tablea 和 tablec 被填充为:-
- 请注意,要利用外键(REFERENCES),您必须专门打开外键支持。
- 在没有打开外键支持的情况下,上述操作仍然有效。但是,可以向 tableb 添加一行,其中菜单列(例如 FishBroth)不是 tablea 中的菜单项。
我不相信你想要更新,至少在没有合适的 WHERE 子句的情况下不会,否则 ALL ROWS 将被更新,将所有行的RawMatType列设置为相同的值。
推荐阅读
- ruby-on-rails - 如何在 Ruby 中获取目录中文件的总大小
- c++ - 高频率插入PostgreSQL,插入数据几分钟后才被选中?
- node.js - 如何自动确定如何在 NodeJS 中裁剪图像?
- typescript - 设置状态,用户数据获取 getIdTokenResult ()
- delphi - Object.Create(nil) 不需要吗?
- javascript - 条纹充电不通过
- antd - 如何从 antd Input.Password 获取用户输入?
- c++11 - 是否有可能杀死一个分离的线程?
- jquery - 画布旋转功能创建空白图像
- c - 逐行读取文件,read() 抓取整个文件