2017-06-05 155 views
0

這可能是一個非常簡單的問題,但大多數搜索都是通過合併行(不合並列)或連接它們來完成的。加入兩個具有相同ID和合並ID列的表

我想連接ID列上的兩個表,但我只希望它返回一個ID列。

實施例:

表1:

ID|Data1|Data2 

表2:

ID|Data3|Data4 

我希望它返回:

ID|Data1|Data2|Data3|Data4 

編輯:

我意識到我可以指定每一列,但實際上有更接近我引入的50列,我寧願不必指定每一列。有沒有辦法做到這一點,而沒有指定每個列從查詢中引出?

我相信自然連接是我需要的,但看到這個錯誤我得到:在分析過程中發現

SELECT * 
FROM allqachecklists t1 
WHERE t1.IsIncorrect=1 
NATURAL JOIN (SELECT QAID, PMC, SiteName, Submitter, QAer FROM qabin.allqas) t2 

1個錯誤。

無法識別的關鍵字。 (附近的「自然」第59位)

+3

請閱讀'JOIN' - https://www.techonthenet.com/mysql/joins。php –

+0

我喜歡用於解釋連接的維恩圖方法:https://blog.codinghorror.com/a-visual-explanation-of-sql-joins/ – xQbert

+1

隨着更新:將where子句移到t2之後。 SELECT,FROM,JOINs,WHERE,GROUP BY,HAVING,ORDER BY,LIMIT(並非所有引擎)....每條語句的順序對編譯器都很重要。奇怪的是,它不按以下順序處理數據:P – xQbert

回答

1

自然聯接將允許您選擇*從這兩個表中加入密鑰。然後這兩列在結果集中作爲ONE返回;前提是兩個表中沒有其他列的名稱相同。

SELECT * 
FROM Table1 A 
NATURAL JOIN Table2 B 

一個例子可以發現:http://rextester.com/FNT36037

MySQL的Docs狀態: ...

自然連接,並根據SQL中使用,其中包括外連接的變種,被處理聯接:2003標準:

NATURAL連接的冗餘列不會出現。 ...

隨着您的編輯問題:我們可以修改您的SQL到下面。

SELECT * 
FROM allqachecklists t1 
NATURAL JOIN (SELECT QAID, PMC, SiteName, Submitter, QAer FROM qabin.allqas) t2 
WHERE t1.IsIncorrect=1 
LIMIT 10 

加入then where子句;儘管小心使用外部連接,因爲沒有所有記錄的表上的限制需要放在連接上,或者外部連接的行爲類似於內部。

+0

我認爲這是接近我想要的,但它不讓我使用natural關鍵字出於某種原因 - 至少不是與子查詢 – user1274820

+0

The rextester的例子工作正確嗎?所以它必須是一個語法錯誤,或者你的mysql版本不支持自然連接。 – xQbert

+0

請參閱我的編輯 – user1274820

1

這是你需要

SELECT table1.ID,table1.Data1,table1.Data2,table2.Data3,table2.Data4 
FROM table1 
JOIN table2 ON table1.id=table2.id 
+0

這可以工作,是的,但有更多像50-100列。我寧願選擇它們全部,但合併ID列,而不必指定每一個。 – user1274820

+1

別名表保存輸入!並提高可讀性。你也可以做'Select a。*,b。*'但是同名的列會被複制。 – xQbert

+0

只要做@xQbert所說的,你將有兩個ID列,但它們會是相同的值,所以沒關係。 – nacho

0

聲音啥子像一個非常簡單的內部聯接:

select A.ID, data1, data2, data3, data4 from A 
inner join B ON A.ID = B.ID 
+0

有沒有辦法做到這一點,而不指定每一列?實際上有更多像返回50-100列。 – user1274820

+0

你真的需要返回所有100列嗎?很少一次都需要;但如果他們是你可以使用'select *'或'select a。*,b。*' – xQbert

+0

對,但是如果我使用'SELECT *',那麼我最終會得到兩個ID列 - 是的我需要每一個。此查詢起作用是因爲他在select語句中只指定了一個ID。 – user1274820

相關問題