PostgreSQL:如何在select语句中添加其他表中的列?

时间:2016-03-22 01:32:02

标签: sql postgresql

我正在尝试从另一个表中选择一个列,就像我以前在 MSSQL 中所做的那样:

 select * , Date = (select top 1 Date from [dbo].TableB where status = 1 order by Date desc)
 from [dbo].TableA

我怎么能在PostgreSQL中做到这一点?

其他样本数据:

  

表A

Names

Richards
Marcos
Luke
Matthew
John    
  

表B

Date        Status
2016-01-01  1
2016-01-02  0
2016-01-03  1
2016-01-04  1
2016-01-05  1 

预期产出:

Name        Date
Richards    2016-01-02
Marcos      2016-01-02
Luke        2016-01-02
Matthew     2016-01-02
John        2016-01-02

谢谢!

5 个答案:

答案 0 :(得分:1)

我不确定这是否是正确的语法,但你是否尝试过这个:

session.flush

我希望它有所帮助。

答案 1 :(得分:1)

Date = (...)无效(标​​准)SQL并且无法在Postgres(或除SQL Server之外的任何其他DBMS)中工作

使用SQL(和Postgres)中的AS ...定义列别名。 Postgres也没有top。它使用limit

在SQL中也不允许在标识符中使用方括号。因此[dbo]需要成为dbo"dbo" depending on how you created the schema

select a.*, 
       (select date
        from dbo.tableb as b
        where b.status = 1 
        order by b.date desc
        limit 1) as date
from dbo.tablea a

date是保留字,不应用作标识符(列名)

如果您想使用标准ANSI SQL,您也可以使用fetch first 1 row only代替limit 1

另一种选择是使用max()代替子选择中的限制,而不是根本不需要限制:

select a.*, 
       (select max(date)
        from dbo.tableb as b
        where b.status = 1) as date
from dbo.tablea a

答案 2 :(得分:0)

试试这个:

select a.*, b.column
from tableA as a, tableB as b;

答案 3 :(得分:0)

我对PostgreSQL不太熟悉,但SQL仍然是SQL。 首先要说的是你必须在第二个表查询中只有一个结果,你可以在

中完成
 SELECT 
        A.*
        (select NewColumn from [dbo].TableB.NewColumn) as NewColumn 
FROM TableA

但是我认为你需要声明一个连接条件。

 SELECT 
        A.*
        (select NewColumn from [dbo].TableB.NewColumn where A.Col1 = TableB.col1)
FROM TableA A

没有一个真实的例子我不能更具体。

答案 4 :(得分:0)

您可以尝试执行CROSS JOIN

SELECT * FROM
    (SELECT * FROM dbo.TableA),
    (SELECT Date FROM dbo.TableB WHERE status = 1 ORDER BY Date DESC LIMIT 1)