Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在SQL中使用集合?_Sql_Postgresql_Sqlite - Fatal编程技术网

如何在SQL中使用集合?

如何在SQL中使用集合?,sql,postgresql,sqlite,Sql,Postgresql,Sqlite,如果您不清楚集合是什么,它允许用户插入值,请检查列表中是否有值,并找到一个交集(如果两个集合中存在值)。此外,一个集合只能保存一次值 如何在SQL中使用集合?我正在使用sqlite,但将转到postgresql。对我来说,最明显的选择是拥有一个包含SetID,SetValue的集合表,这两个值是主键。然而,我有一种感觉,这不会是有效的,因为SetID会重复很多次。另一个选项是有一个tableintsetid,blobsetarray,但我需要手工实现set逻辑 在SQL中执行集合的最佳方法是什么

如果您不清楚集合是什么,它允许用户插入值,请检查列表中是否有值,并找到一个交集(如果两个集合中存在值)。此外,一个集合只能保存一次值

如何在SQL中使用集合?我正在使用sqlite,但将转到postgresql。对我来说,最明显的选择是拥有一个包含
SetID,SetValue
的集合表,这两个值是主键。然而,我有一种感觉,这不会是有效的,因为SetID会重复很多次。另一个选项是有一个table
intsetid,blobsetarray
,但我需要手工实现set逻辑

在SQL中执行集合的最佳方法是什么?对于sqlite或postgresql?

有几个选项:

  • 触发器以查看值的存在,如果存在,则返回NULL(完全完成您正在执行的操作)
  • 只需使用唯一的约束和处理错误
  • 这两种方法都将表从包移动到集合,但它们的方式不同,一种是通过赋予它更多类似于选择的语义(稍微降低性能成本),另一种是更传统的SQL方式,以强制在输入时进行数据验证

    如果要选择作为一个集合,请使用
    选择distinct

    几个选项:

  • 触发器以查看值的存在,如果存在,则返回NULL(完全完成您正在执行的操作)
  • 只需使用唯一的约束和处理错误
  • 这两种方法都将表从包移动到集合,但它们的方式不同,一种是通过赋予它更多类似于选择的语义(稍微降低性能成本),另一种是更传统的SQL方式,以强制在输入时进行数据验证


    如果要选择作为集合,请使用
    select distinct

    在我看来,具有两列
    SetID
    SetValue
    的表的第一个选项是最好的。多次重复相同ID的开销是最小的,总的来说,通常比拆分blob的成本要低得多。主键或至少一个唯一的索引将确保一个值只能在一个集合中存在一次,然后可以使用
    EXISTS
    INTERSECT/EXCEPT
    运算符来识别集合中的重叠和差异,然后要获得精确匹配,请参见@GarethD:这就是我的想法。你的评论应该是一个答案。我不知道关于除操作员的事,这是件好事。我不相信这个评论有足够的实质内容来回答这个问题。我没有证明一种方法优于另一种方法的参考资料或测试,仅基于我的意见的回答可能会阻止其他地方提供更好的、确凿的答案。在我看来,第一个选项是两列
    SetID
    SetValue
    的表格。多次重复相同ID的开销是最小的,总的来说,通常比拆分blob的成本要低得多。主键或至少一个唯一的索引将确保一个值只能在一个集合中存在一次,然后可以使用
    EXISTS
    INTERSECT/EXCEPT
    运算符来识别集合中的重叠和差异,然后要获得精确匹配,请参见@GarethD:这就是我的想法。你的评论应该是一个答案。我不知道关于除操作员的事,这是件好事。我不相信这个评论有足够的实质内容来回答这个问题。我没有证明一种方法优于另一种方法的参考资料或测试,仅凭我的观点,我的回答可能会阻止其他地方给出更好的、确凿的答案。