2012-06-19 116 views
1

我想在一定的時間範圍內檢索所有的id。時間戳然而, 存儲在不同的表:如何連接兩個查詢結果?

Table A has column my_id 
Table B has columns my_id, timestamp 

我希望像

SELECT 
    id, 
    time 
FROM 
    (SELECT my_id AS id FROM A) q1, 
    (SELECT timestamp AS time FROM B WHERE my_id = id) q2 
; 

但我怎麼能得到不同的子查詢中的id價值?有沒有 這個問題的優雅解決方案?

+0

他們有不同的列嗎? –

+0

兩者中的列名是相同的,但數據不同。儘管我需要來自表A的數據。我無法更改任何數據庫。 – nijansen

+0

把它們放在一張桌子裏會更乾淨,但你可以使用一個聯合(假設沒有把這兩個桌子連在一起) –

回答

1

我看到,在第二子查詢嘗試將兩個錶鏈接:

(SELECT my_id AS id FROM A) q1, 
(SELECT timestamp AS time FROM B WHERE my_id = id) q2 

如果這兩個ID必須等於:

SELECT a.my_id as id, b.timestamp as time 
FROM A a 
JOIN B b ON (a.my_id = b.my_id); 

我希望這有助於。

+0

這正是我正在尋找的。謝謝一堆。 – nijansen

1

簡單:

SELECT my_id AS id, b.my_ts 
FROM a 
JOIN b USING (my_id); 
  • FROM A a(已被告知等)是無義,因爲我引用the manual

把一個標識符還使得大小寫敏感的,而沒有引用的 名稱總是摺疊爲小寫。

  • 同時允許在PostgreSQL中,類型名稱timetimestamp是保留字在每個SQL標準並且不應該被用作標識符。

  • USINGsyntactical shorthand, mostly

+0

這確實看起來有些整齊。 'time'和'timestamp'不是真實應用程序中使用的名稱。我選擇這些作爲我的榜樣,以明確我所要求的。 – nijansen