【问题标题】:How to query the specific vales in columns form different tables(SQLite)?如何从不同的表(SQLite)中查询列中的特定值?
【发布时间】:2019-12-02 04:07:42
【问题描述】:

我有两个表,table1 和 table2。 table1 有“id”列。 table2 有 'id' 和 'quantity' 列。我想比较两个表中“id”列下的相同值,并在 table2 中显示“数量”列下的值。 简单的逻辑是“从 table1 中选择 id=1 与从 table2 中选择 id=1 进行比较,然后从 table2 中显示数量值”。有没有办法查询这个语句?

【问题讨论】:

    标签: sql sqlite


    【解决方案1】:

    加入表格:

    SELECT * 
    FROM
      table1 t1
      INNER JOIN table2 t2
      ON t1.id = t2.id
    

    使用 INNER JOIN 将导致结果仅显示两个表中存在相同 ID 的行。如果您想显示表 1 中的所有行和表 2 中的匹配行,加上对于特定表 1 id 没有表 2 id 的任何行的空白,则使用 LEFT JOIN 而不是 INNER JOIN。

    如果您只想要输出中的某些列,您可以列出它们:

    SELECT t1.id, t2.quantity
    ...
    


    有关联接的更多信息 - 供未来学习

    在大多数其他数据库系统中都存在 LEFT join 的推论;正确的加入。如果您想要表 2 中的所有行加上表 1 中的匹配行,以及没有相关表 1 行的空白,请使用 RIGHT JOIN。 SQLite 不支持 RIGHT 连接,因此您必须重写查询(交换表名),以便 t2 在左侧。重要的是表名,而不是 ON 部分的出现顺序:

    --all rows from t1 plus any matching rows from t2
    SELECT * 
    FROM
      table1 t1        
      LEFT JOIN table2 t2
      ON t1.id = t2.id
    
    --all rows from t2 plus any matching rows from t1
    SELECT * 
    FROM
      table2 t2       
      LEFT JOIN table1 t1
      ON t1.id = t2.id
    

    最终您会遇到一个 FULL [OUTER] JOIN,即“来自 t1 的所有行和来自 t2 的任何匹配,以及来自 t2 的任何其他行及其可能来自 t1 的匹配”。 SQLite 也不支持这个,但它可以被模拟。通常它使用 LEFT JOIN UNION RIGHT JOIN 进行模拟,但由于 SQLite 不支持 RIGHT,因此您必须使用两个 LEFT 连接来模拟它,其中一个是交换表:

    --all rows from t1 plus any matching rows from t2
    SELECT * 
    FROM
      table1 t1        
      LEFT JOIN table2 t2
      ON t1.id = t2.id
    
    UNION
    
    SELECT * 
    FROM
      table2 t2       
      LEFT JOIN table1 t1
      ON t1.id = t2.id
    

    科尔。所有这些都是为了能够在例如SQLServer:

    SELECT * 
    FROM
      table1 t1        
      FULL OUTER JOIN table2 t2
      ON t1.id = t2.id
    

    【讨论】:

    • 非常感谢@CaiusJard 给了我更多的知识
    猜你喜欢
    • 1970-01-01
    • 2021-10-05
    • 1970-01-01
    • 1970-01-01
    • 2021-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多