【问题标题】:PostgreSQL single query SELECT single row FROM two tables without JOINPostgreSQL 单查询 SELECT single row FROM two tables without JOIN
【发布时间】:2014-12-06 04:56:04
【问题描述】:

我需要创建的查询结果只会返回一行。我需要提取的数据来自两个没有任何关系列的表。第二个表每年只添加一次额外的行,因此我将根据需要通过 PHP 构建查询。

我知道如何使用 SQL 子 SELECT,但是我确定当性能导向/动态中没有关系数据时如何 SELECT 多列 FROM 第二个表方式。

这是一个静态示例,我使用多个子 SELECT 来可视化我正在尝试做的事情...

SELECT t1.a, 
t1.b, 
t1.c, 
(SELECT t2.d FROM table2) AS d, 
(SELECT t2.e FROM table2) AS e, 
(SELECT t2.f FROM table2) AS f, 
(SELECT t2.g FROM table2) AS g, 
t1.h, 
t1.i
FROM table1 AS t1;

如何从与第一个表没有关系列的第二个表中动态有效地提取多个列?

我不想创建第二个单独的查询,因为它是一种廉价的解决方案,很可能对性能有一些影响,最糟糕的是,我不会扩展我对 SQL 的理解。 p>

【问题讨论】:

    标签: postgresql


    【解决方案1】:

    听起来您需要笛卡尔连接(无连接)——但您会将这些值相乘(即,如果表 1 有 100 行,而表 2 有 10 行,您将返回 1000 行)

    SELECT t1.a, 
    t1.b, 
    t1.c, 
    t2.d, 
    t2.e, 
    t2.f,
    t2.g,
    t1.h, 
    t1.i
    FROM table1 AS t1, table2 as t2;
    

    【讨论】:

    • 如何在 Ruby on Rails 中做到这一点?
    • 我不是 ROR 专家,但它基本上是从 2 个表中查询而不加入它们。您有 ROR 中“select * from blah”类型查询的示例吗?
    【解决方案2】:

    这样做的语法是:

    SELECT t1.a, 
           t1.b, 
           t1.c, 
           t2.d, 
           t2.e, 
           t2.f, 
           t2.g, 
           t1.h, 
           t1.i
    FROM table1 AS t1, table2 as t2;
    

    如果您不加入这两个表,通常需要两个查询。否则,您将得到两个表的笛卡尔积:

    http://en.wikipedia.org/wiki/Cartesian_product

    【讨论】:

    • 与我发布的答案相同。
    • @JoeLove:几乎同时回答。如果您是投反对票的人,您可能想check this out 以供将来参考。
    猜你喜欢
    • 1970-01-01
    • 2023-01-27
    • 2022-12-01
    • 1970-01-01
    • 2013-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-19
    相关资源
    最近更新 更多