2017-04-14 97 views
1

所以我有兩張桌子,說comment_table和post_table,加入兩個表的列

comment_table:

link_id body 
t3_100 people on StackOverflow are smart 
t3_100 StackOverflow is a good place to raise questions 
t3_101 where can I learn sql 
t3_102 Happy Eastern 
t3_102 where did my bunny go? 

post_table

id  title 
100  Thought on StackOverflow 
101  sql beginner 
102  Eastern 
105  Title that has no comments 

「link_id」 是由串聯 't3_' +來自post_table的ID。我想要的是兩個「id」加入這兩個表。

期望輸出

id  title      link_id body 
100  Thought on StackOverflow  t3_100 people on StackOverflow are smart 
100  Thought on StackOverflow  t3_100 StackOverflow is a good place to raise questions 
101  sql beginner     t3_101 where can I learn sql 
102  Eastern      t3_102 Happy Eastern 
102  Eastern      t3_102 where did my bunny go? 
105  Title that has no comments t3_105 NULL 

這裏是腳本我有,

SELECT PT.ID, PT.title, CT.link_id, CT.body 
FROM post_table as PT 
LEFT OUTER JOIN comment_table as CT 
ON PT.ID = CT.concat('t3_', link_id) 

它語法錯誤,你怎麼認爲我可以解決這個問題,以獲得預期的輸出?

+1

錯誤消息應該告訴你在句法錯誤所在。編輯你的問題,並添加完整的錯誤信息。 –

+1

爲什麼不直接在'link_id'中存儲整數?你這樣做的方式,你不能定義一個外鍵。如果您需要以其他方式加入,您將無法爲連接使用索引。 –

+0

在任何情況下,您都有兩個表別名(PT和CT)切換到腳本的最後一行,這意味着您必須連接PT.ID而不是CT.link_id。嘗試先改變它。 Luc – luc

回答

1

您正在爲函數指定別名,它應該與字段。

這會工作。

SELECT PT.ID, PT.title, CT.link_id, CT.body 
FROM post_table as PT 
LEFT OUTER JOIN comment_table as CT 
ON CT.link_id = CONCAT('t3_', PT.ID) 
+0

下面是我得到的結果,「錯誤:ON子句必須是AND表達式=每個表格中一個字段名稱的比較,所有字段名稱都以表格名稱作爲前綴。」 – Bobby

+0

@Bobby你確定你在使用mysql嗎?該錯誤似乎特定於BigQuery。 – Jerrad

+0

@Bobby我認爲你不應該用mysql標記問題。 – Jerrad

0

你沒有正確使用concat。所以你想連接「t3_」與idpost_table

SELECT PT.ID, PT.title, CT.link_id, CT.body 
FROM post_table as PT 
LEFT OUTER JOIN comment_table as CT 
ON CT.link_id = concat('t3_', PT.id) 

comment_tablelink_id是一個與「t3_」:試試這個。

另外,要加入這樣的表是非常可怕的。這將是更好的只是post_idcomment_table,如果你需要「t3_」追加到它由於某種原因,這樣做在SELECT

Select PT.ID, PT.title, concat('t3_', PT.id) link_id, CT.body 

更新

既然是現在顯然你正在使用BigQuery而不是mysql,上面的答案不適用。我不是很熟悉的BigQuery,但你可以嘗試:

SELECT PT.ID, PT.title, CT.link_id, CT.body 
FROM post_table as PT 
LEFT OUTER JOIN comment_table as CT 
ON CT.link_id = 't3_' + PT.id 
0

不知道的語法本身,但它似乎更爲明智的事:在你的ON PT.ID = CT.concat('t3_', link_id)條件

concat('t3_', PT.ID) = CT.link_id 
0

關注。使用下面的SQL。

SELECT PT.ID, PT.title, CT.link_id, CT.body 
FROM post_table as PT 
LEFT OUTER JOIN comment_table as CT 
ON (CT.link_id = concat('t3_',PT.ID)) 
1

下面嘗試使用BigQuery的標準SQL

#standardSQL 
SELECT PT.ID, PT.title, CT.link_id, CT.body 
FROM post_table AS PT 
LEFT OUTER JOIN comment_table AS CT 
ON CT.link_id = CONCAT('t3_', PT.ID)