是否以正确的方式进行跨表查询?

时间:2016-10-23 12:48:25

标签: sql postgresql sequelize.js

我有一些表格的第三种正常表格,我需要做一些跨表查询来获取我需要的信息。

我查看了连接,但似乎它会创建一个新表。这是执行此类查询的正确方法吗?或者我应该只做嵌套查询?我想如果我不得不做这些查询可能有意义吗?我真的不确定如何优化这些操作。我正在使用sequelize ORM,我不确定我是否看到任何明确的解决方案。

1 个答案:

答案 0 :(得分:0)

在我看来,你在询问联接与子查询。这些在某种程度上是不同的。但是,让我们从几点开始。

  1. 联接创建新的relvar,而不是新表。 relvar是一个变量,代表连接操作的关系输出。它是暂时的(与持久的观点相反)。
  2. 联接和子查询并不总是完美的替代品。有时候你需要两者。
  3. 您的查询输出也是relvar。
  4. 如上所述,一般情况下我认为联合是可取的。主要原因是可以使用下面的结构编写的SQL查询比大多数替代方法更容易理解和调试(当你掌握语言时),并且列列表中的子查询也必然表现不佳:

    SELECT [column_list]
      FROM [initial_table]
     [join list]
     WHERE [filters]
    GROUP BY [grouping list]
    HAVING [post-aggregation filters]
    LIMIT [limit and offset]
    

    如果您的查询符合上述结构,那么您通常可以预期查询的特定部分中的逻辑中会出现特定类型的问题。另一方面,对于子查询,您必须单独检查这些。