【问题标题】:How to select items of a SQLite table based on a column with a specific propriety located in another table?如何根据位于另一个表中的具有特定属性的列来选择 SQLite 表的项目?
【发布时间】:2016-09-15 02:44:24
【问题描述】:

我有以下情况:我的 SQLite 数据库中有 2 个表,其中一个称为“资产”,另一个称为“操作”。

“资产”包括一个市场资产列表,每个资产都具有特定的“资产类型”值及其名称。

“Operations”有很多列,其中之一是“asset”;每个操作都使用一个资产完成。

现在我的应用中有一个表格,我想用“与特定资产类型相关的所有操作”来填充,这需要快速完成。我的问题是:我怎样才能以既快速又优雅的方式做到这一点?

我现在有两种方法,但它们都不够:一种是简单地在操作表中添加一个名为“资产类型”的新行,使搜索变得非常简单。问题是这远非优雅,因为操作和资产类型之间没有直接联系。另一种解决方案是首先调用某种类型的资产列表,然后仅在“操作”表中查找“此列表中包含的资产”。但这将是一个处理怪物,因为每种类型可能有数十到数百个资产。

还有其他我想不通的方法吗?

【问题讨论】:

  • 这称为 join,这或多或少是发明 SQLite 等 RDBMS 的原因。
  • 请查看加入和更新信息。试一试。如果它不起作用,请发布您尝试过的方法,我们会提供帮助!
  • @EoinS 感谢和 j_random。我查看了 join,但要么这些示例不够清晰,要么它不能完全满足我的需要。更具体地说,我不想在查询中“加入”表,我想只选择一个表的数据,但使用更高级的子句和另一个表的信息。
  • 您所描述的内容(在您的原始问题和评论中)在我看来与 join 所完成的完全一样(尽管可能是间接的)。没有必要真正输出所有表中的所有列——也许这就是你出错的地方? FWIW,大多数数据库(也可能是 SQLite,虽然我不知道)也有一个名为 subqueries 的功能,它可以让你以更直观的方式表达你想要的东西——尽管我不得不说在内部,这被转换为(并等效于)连接。

标签: sql algorithm sqlite select where


【解决方案1】:

只需以显而易见的方式进行:

SELECT *
FROM Operations
WHERE AssetID IN (SELECT AssetID
                  FROM Assets
                  WHERE AssetType = ?);

加入也可以做到这一点

SELECT Operations.*
FROM Operations
JOIN Assets USING (AssetID)
WHERE AssetType = ?;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-09
    • 2016-05-18
    • 1970-01-01
    相关资源
    最近更新 更多