【问题标题】:PostgreSQL, query two (or more) tables without using a secondary keyPostgreSQL,在不使用辅助键的情况下查询两个(或更多)表
【发布时间】:2013-01-12 12:37:23
【问题描述】:

我有这样的情况:

表 1:pk1 int、pk2 int、string1、string2、string3
表2:pk3 int, string4, string5, string6

第一个表中的 pk2 int 与第二个表中的 pk3(索引)相同。 创建表时,我没有使用辅助键,现在如果可能,我必须在单个查询中查询这两个表。 到目前为止,我通过两个查询来做到这一点:

SELECT pk1, pk2, string1, string2, string3 
FROM table1 
WHERE string1 ILIKE 'a%'   

然后,循环遍历结果:

SELECT pk3, string4, string5, string6 
from table2 WHERE pk3=" & Cint(reader.GetValue(1))  

注意:reader.GetValue(1) = pk2 来自第一个表)

最后我得到了所需的本地结果,例如:

1、string1、string2、string3、string4、string5、string6

我在第二个查询中使用 ANY 或 IN 进行了一些简化,但我相信像 PostgreSQL 这样强大的数据系统可以在单个查询中完成此操作。

该查询在显示的示例中应该是什么样子?

【问题讨论】:

    标签: postgresql


    【解决方案1】:
    SELECT t1.pk1, 
           t1.pk2, 
           t1.string1, 
           t1.string2, 
           t1.string3, 
           t2.string4, 
           t2.string5, 
           t2.string6
    FROM table1 t1
      join table2 t2 on t1.pk2 = t2.pk3
    WHERE t1.string1 ILIKE 'a%'   
    

    【讨论】:

    • 嗨,“姓名”,JOIN 是我要搜索的内容吗?还没有尝试,因为我的表有很多列。但我想知道您从哪里获取(从未定义) t1 和 t2 变量,在这种情况下它们是绝对必要的吗?
    • @user973238 这些是表名的别名。它们不是绝对必要的,但使查询更易于阅读(并且需要更少的输入)有关详细信息,请参阅手册:postgresql.org/docs/current/static/…
    • 我的查询按预期工作! :) 我必须阅读一下这个非常有用的功能。再次非常感谢“名字”。我注意到使用“别名”我可以混合使用 t1 和 t2 变量,使其更适合我的数据适配器和数据网格,这是非常好的可能性!
    【解决方案2】:

    使用join子句组合两张表,得到结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-17
      • 1970-01-01
      • 2023-04-06
      • 1970-01-01
      • 2011-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多