【问题标题】:Querying with foreign key使用外键查询
【发布时间】:2010-05-30 00:52:09
【问题描述】:

假设我有 2 个表,其结构如下:

表A

标识 | A1 | A2

表B

标识 | tableA_id (外键) | B1

A 中的条目与 B 中的条目具有一对多的关系。我需要什么样的查询操作来实现“类似这样:从表 B 中选择 A1="foo"”的所有对象?基本上,在 tableA 上应用查询并从这些结果中找到 tableB 中相应的依赖对象

【问题讨论】:

    标签: sql sqlite


    【解决方案1】:

    最好使用连接来执行:

    select 
        B.* 
    from 
        tableB as B 
        join tableA as A 
            on B.tableA_id=A.id 
    where 
        A1='foo'
    

    【讨论】:

    【解决方案2】:

    SELECT * FROM tableB WHERE tableA_id IN (SELECT id FROM tableA WHERE A1 = "foo");

    子查询我的朋友。

    在 MySQL 和 Oracle 上运行良好。不了解 SQL Server。希望就是您所寻找的。​​p>

    【讨论】:

    • 这也可以,谢谢!子查询与联接之间是否存在性能差异?
    • 这取决于数据库引擎...但通常连接会消耗更多内存,因为两个表都必须跨入内存...当您使用子查询时,它更有效,因为您一个人做一个当时查询并且只使用一小部分表并且不进行连接......但是像Oracle 10g这样的一些数据库引擎改进了对连接和类似事物的查询优化......无论如何......我不再喜欢inner多年前加入...根据我的个人经验,如果您使用的数据库引擎支持子查询,则使用它们而不是加入。
    【解决方案3】:

    您需要连接表 A 和 B 并对结果发出查询:

    select * from
    tableA join tableB
    ON tableA.A1 = tableB.tableA_id
    WHERE tableA.A1 = 'foo'
    

    【讨论】:

      猜你喜欢
      • 2017-11-25
      • 2017-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多