2017-06-20 67 views
1

我有以下scenario.I有3個表具有以下結構。Postgres從表中存在條目的SQL SELECT數據ID

TABLE A 
-entry_id (PRIMARY KEY, INTEGER) 

TABLE B 
-entry_id (FOREIGN_KEY -> TABLE A) 
-content (TEXT) 

TABLE C 
    -entry_id (FOREIGN_KEY -> TABLE A) 
    -content (INTEGER) 

我想從表B或表C中檢索內容單元格值。該值可以只在表格中的一箇中。所以它是表B或C女巫有一個給定entry_id的條目。

PS。很抱歉,如果重複無法找到任何匹配我需要的東西。

+0

想的東西,有也適用第4張桌子。例如: TABLE D -entry_id(FOREIGN_KEY - > TABLE A) -content(DOUBLE) –

回答

1

如果我理解正確的,你需要的東西,如:

select entry_id, content::text from TABLEB where entry_id = ? 
union all 
select entry_id, content::text from TABLEC where entry_id = ? 
union all 
select entry_id, content::text from TABLED where entry_id = ? 
+0

沒有我的問題是我有一個entry_id,並且該entry_id的值可以在任何的3個表(一個值只能在一個表和entry_id中)。所以我希望根據entry_id從其他3個表中的其中一個表中挑選數據。它是否有意義? –

+0

@Cosmin_Victor - 然後在所有查詢中添加where子句,請檢查編輯後的答案。 –

+0

感謝這個解決方案對我最好。 –

1

如果它可以在一個表在同一時間只能存在,使用工會

select a1.entry_id, b2.content 
from TableA a1 
inner join TableB b2 
on a1.entry_id = b2.entry_id 

union -- This removes any duplicates. Use UNION ALL to show duplicates 

select a1.entry_id, c3.content::text 
from TableA a1 
inner join TableC c3 
on a1.entry_id = c3.entry_id 
+0

'UNION'將刪除重複項,爲什麼您謂詞「一次僅存在於一個表中」? –

+0

1)UNION類型整數和文本不能匹配。 –

+0

@Cosmin_Victor介意',c3.content :: text'鑄 –

相關問題