【问题标题】:return data as column from other table从其他表返回数据作为列
【发布时间】:2016-06-08 18:44:26
【问题描述】:

使用两个 SQLite 表,示例如下。我想返回此人的姓名和他们的年龄范围,而不是 rangeId。

SELECT t1.ageRange, t2.name   
FROM Table1 t1   
INNER JOIN Table2 t2  
WHERE t1.rangeId = t2.ageRangeId  
. . //这段代码做我想做的事,但效率很低而且不可扩展 . Table1 _____________//表名 rangeId : ageRange__ //列名 1 : 0 - 16 ___________//样本数据 2 : 17 - 28 3 : 29 - 50 4 : 50+ . 表2 名称:ageRangeId 约翰:2 大卫:3 卡尔:2 本:1

【问题讨论】:

  • 我认为没有更好的方法。
  • 使用 ON insted of where
  • ...哦,显然除了那个;-$
  • 连接和子查询同样高效且可扩展。你有什么具体问题?

标签: sqlite join


【解决方案1】:

INNER JOIN 语法是

FROM Table1 INNER JOIN Table2 ON Table1.key=Table2.key

我做了一个小提琴。这就是你想要的:

SELECT t1.ageRange, t2.name   
FROM Table1 t1   
INNER JOIN Table2 t2  
ON t1.rangeId = t2.ageRangeId  

http://sqlfiddle.com/#!9/10c60f/2

问题在于您的示例很简单,而且您的操作方式无法改进。您只需加入 2 个小桌子。有不同的方法可以做到这一点,但它们都是等价的

【讨论】:

    【解决方案2】:

    试试这个

    SELECT t2.name, t1.ageRange
    FROM Table1 t1 INNER JOIN Table2 t2 ON (t1.rangeId = t2.ageRangeId)
    

    【讨论】:

      【解决方案3】:

      连接的替代方法是correlated subquery

      SELECT name,
             (SELECT ageRange
              FROM Table1
              WHERE rangeId = Table2.ageRangeId
             ) AS ageRange
      FROM Table2;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-19
        • 1970-01-01
        • 1970-01-01
        • 2013-12-17
        • 1970-01-01
        • 2021-02-14
        相关资源
        最近更新 更多