我有兩張包含不同公司的表格。我想從tableOne
中選擇出現在tableTwo
(事實上,只有在出現在tableTwo
中時)。我會通過比較他們的companyID
字段來做到這一點。它們也必須具有相同的值,列someYear
。換句話說,我想要退還中出現的公司tableOne
,當且僅當他們的someYear
列匹配。根據匹配列進行選擇
tableOne
companyID someYear
--------- --------
1 2010
2 2009
3 2011
1 2011
7 2009
tableTwo
companyID someYear
--------- --------
1 2010
2 2008
3 2011
4 2011
5 2009
我想回到1
和3
(公司2
的一年有所不同,所以我不希望它)。我徒勞的:
SELECT one.*
FROM tableOne one, tableTwo two
WHERE one.[companyID] in (
SELECT DISTINCT companyID
FROM tableTwo
)
and one.someYear = two.someYear;
這裏的問題是,它返回數百萬行的,當兩個表包含少於10,000個條目。由於敏感信息,我無法重新創建輸出。這裏的表格/列名都是由我可以確定的。另外我也許應該指出,這兩個表都沒有主鍵。我認爲這會導致他們沒有任何東西可以匹配。我正在使用SQL Server 2008.任何幫助將非常感激。
+1,葉氏,一個簡單的'INNER JOIN'是正確的答案 – Lamak
@Lamak我尷尬壞在任何涉及一個加入,我應該去學習他們正確。 我只是有一個簡單的跟進問題。這個查詢返回的行數多於'tableTwo'中的數據,這是我根本沒有想到的。看一些返回的行,我可以看到一些重複。很明顯,我可以使用'DISTINCT'來取出這些。我只是想知道,爲什麼這些副本會發生?它們在兩個表中都不重複。例如,一個公司在'tableTwo'中有兩行,但是這個查詢返回三個 - 其中兩個是相同/重複的。 – MadScone
@MadScone - 如果在tabelOne中有重複的行,並且有一行匹配tableTwo中的重複行,那麼您將在tableOne中的每行結果集中獲得一行。 –