【问题标题】:How to have combination of one column in sqlite?如何在sqlite中组合一列?
【发布时间】:2021-12-04 06:50:01
【问题描述】:

我有这个 sqlite 专栏:

USA
Russia
Japan

我需要有这样的两列:

USA Russia
USA Japan
Russia USA
Russia Japan
Japan USA
Japan Russia

我该怎么做?

【问题讨论】:

    标签: sql sqlite


    【解决方案1】:

    加入

    select  t1.country, t2.country
    from myTable as t1
    join myTable as t2 on t1.country != t2.country
    

    【讨论】:

      【解决方案2】:

      您需要根据列的不等式对表进行自连接:

      SELECT t1.col AS column1, 
             t2.col AS column2
      FROM tablename t1 INNER JOIN tablename t2
      ON t2.col <> t1.col;
      

      【讨论】:

      • “组合是通过交叉连接完成的。” ...或内部连接,就像它一样。 :) 有趣的一点是这个问题和交叉连接是否优化到同一个查询计划中。
      • ...刚刚检查过,确实如此。
      • @Tomalak from sqlite.org/lang_select.html: "CROSS JOIN" 连接运算符产生与 "INNER JOIN"、"JOIN" 和 "," 运算符相同的结果,但查询的处理方式不同它阻止查询优化器对连接中的表重新排序。应用程序程序员可以使用 CROSS JOIN 运算符直接影响选择用于实现 SELECT 语句的算法。”
      • @Tomalak 还:“避免使用 CROSS JOIN,除非在需要手动控制查询优化器的特定情况下。避免在应用程序开发的早期使用 CROSS JOIN,因为这样做是过早的优化。 CROSS JOIN 的特殊处理是 SQLite 特有的特性,不是标准 SQL 的一部分。”所以,如果我可以避免交叉连接,我会使用内部连接。
      • 好的,很高兴知道。那我就删掉我的回答。我对这个方向有些怀疑(“在非常特定的情况下交叉连接可能会更快”),但文档很清楚,在那些非常特定的情况出现之前应该避免它。
      猜你喜欢
      • 2020-05-29
      • 2014-06-27
      • 2014-01-06
      • 2016-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-19
      • 2023-04-03
      相关资源
      最近更新 更多