使用 ID 从另一个 table 中选择项目

Selecting Items from another table using ID

我有两个 tables Item 和一个 table 记录每个订单中的项目(交界处 Table)

项目Table

String itemTable = "CREATE TABLE " + ITEM_TABLE + " ("
        + ID_ITEM + " INTEGER PRIMARY KEY AUTOINCREMENT,"
        + ITEM_NAME + " TEXT,"
        + ITEM_TYPE + " TEXT,"
        + ITEM_PRICE + " TEXT);";

ORDER_ITEM Table

String orderItemTable = "CREATE TABLE " + ORDER_ITEM_TABLE + " ("
        + ID_ORDER_ITEM + " INTEGER,"
        + ID_ITEM_ORDER + " INTEGER,"
        + " FOREIGN KEY ("+ID_ORDER_ITEM+") REFERENCES "+ EMP_TABLE +"("+ ID_EMP +"), "
        + " FOREIGN KEY ("+ID_ITEM_ORDER+") REFERENCES "+ EMP_TABLE +"("+ ID_EMP +"));";

ORDER_ITEM table 中的数据每个 Item id 指的是项目中的特定项目 table 这就是我要引用和使用的内容从 DB.

中提取数据

目前我可以使用 Id 从这个 table 中提取 Item id,但不能提取实际的 Item。这里idOrder是在订单selected

时传递的
String selctAllEmployeesOrdersItems = "SELECT * FROM " + ORDER_ITEM_TABLE + " WHERE " + ID_ORDER_ITEM + " = " + idOrder;

实现我想要的方法的一种方法是将 Item ID's 存储在 ArrayList 中并将其迭代到 select 所有 Items 但我知道那里是更好的方法。

我看到的一些研究建议我加入引用 ITEM ID 的 table,但我不确定语法是否正确。点符号不适用于此查询。

String selctAllEmployeesOrdersItems = "SELECT * FROM " + ORDER_ITEM_TABLE + " WHERE " + ID_ORDER_ITEM + " = " + idOrder
        + " JOIN " + ITEM_TABLE + " ON " + ORDER_ITEM_TABLE+"."+ID_ITEM_ORDER + " = " + ITEM_TABLE+"."+ID_ITEM;

显示的错误信息是

Caused by: android.database.sqlite.SQLiteException: near "JOIN": syntax error (code 1 SQLITE_ERROR): , while compiling: SELECT * FROM ORDER_ITEM_TABLE WHERE ID_Order = 1 JOIN ITEM_TABLE ON ORDER_ITEM_TABLE.ID_Item = ITEM_TABLE.ID

我相信你的条款顺序错了,应该是: select ...从...加入...在...哪里... 所以在这种情况下:

SELECT * FROM
ORDER_ITEM_TABLE JOIN ITEM_TABLE
ON ORDER_ITEM_TABLE.ID_Item = ITEM_TABLE.ID
WHERE ORDER_ITEM_TABLE.ID_Order=1;

where 子句位于联接之后。我还建议使用 table 别名来缩短查询并使其更具可读性。最后,您可能只想从项目 table 中获取 select 列,而不是从联结点 table(您已经在过滤):

SELECT i.*
FROM ORDER_ITEM_TABLE oi 
JOIN ITEM_TABLE i ON oi.ID_Item = i.ID
WHERE oi.ID_Order = 1

您的 SQL 语句的语法错误。
WHERE子句必须写在join之后:

String selctAllEmployeesOrdersItems = 
  "SELECT * FROM " + ORDER_ITEM_TABLE + " AS o " + 
  "INNER JOIN " + ITEM_TABLE + " AS i ON o." + ID_ITEM_ORDER + " = i." + ID_ITEM + " " +
  "WHERE o." + ID_ORDER_ITEM + " = " + idOrder;

请注意使用别名 oi 来显着缩短代码的 2 table。

另外,tableORDER_ITEM的定义:

String orderItemTable = "CREATE TABLE " + ORDER_ITEM_TABLE + " ("
        + ID_ORDER_ITEM + " INTEGER,"
        + ID_ITEM_ORDER + " INTEGER,"
        + " FOREIGN KEY ("+ID_ORDER_ITEM+") REFERENCES "+ EMP_TABLE +"("+ ID_EMP +"), "
        + " FOREIGN KEY ("+ID_ITEM_ORDER+") REFERENCES "+ EMP_TABLE +"("+ ID_EMP +"));";

似乎不​​正确。
什么是tableEMP_TABLE?
为什么 ID_ORDER_ITEMID_ITEM_ORDER 两列引用同一列?
这没有意义。