使用 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;
请注意使用别名 o
和 i
来显着缩短代码的 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_ITEM
和 ID_ITEM_ORDER
两列引用同一列?
这没有意义。
我有两个 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;
请注意使用别名 o
和 i
来显着缩短代码的 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_ITEM
和 ID_ITEM_ORDER
两列引用同一列?
这没有意义。