我正在尝试从另一个表中选择一个列,就像我以前在 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
谢谢!
答案 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)