如何加入 one-to-many 个表?
How to join one-to-many tables?
我在 SQLite 中有如下场景:
一些商品的价格存储在 price table 中。一件商品的当前价格是:
- 它Price.fkItemID == Item.id
- 这是最近的匹配项(在符合条件 1 的那些人中 ID 最大)
那么我如何在 SQLite 中加入下面的 tables 以便我得到一个包含当前价格的项目列表?
另外,有多个join,会不会导致性能下降太多?
要获取具有最大 ID 的行,请使用按 ID 排序的相关子查询,并只获取第一个返回的行:
SELECT name,
(SELECT price
FROM Table2
WHERE fkItemID = Table1.id
ORDER BY id DESC
LIMIT 1
) AS current_price
FROM Table1
如果存在允许在 fkItemID
上搜索然后在 id
上排序的索引,则此查询是有效的:
CREATE INDEX Table2_fkItemID_id ON Table2(fkItemID, id);
(如果历史价格不多,其实没必要索引id
列。)
我在 SQLite 中有如下场景: 一些商品的价格存储在 price table 中。一件商品的当前价格是:
- 它Price.fkItemID == Item.id
- 这是最近的匹配项(在符合条件 1 的那些人中 ID 最大)
那么我如何在 SQLite 中加入下面的 tables 以便我得到一个包含当前价格的项目列表?
另外,有多个join,会不会导致性能下降太多?
要获取具有最大 ID 的行,请使用按 ID 排序的相关子查询,并只获取第一个返回的行:
SELECT name,
(SELECT price
FROM Table2
WHERE fkItemID = Table1.id
ORDER BY id DESC
LIMIT 1
) AS current_price
FROM Table1
如果存在允许在 fkItemID
上搜索然后在 id
上排序的索引,则此查询是有效的:
CREATE INDEX Table2_fkItemID_id ON Table2(fkItemID, id);
(如果历史价格不多,其实没必要索引id
列。)