簡體   English   中英

SQL Server聯接和通配符

[英]SQL Server join and wildcards

我想獲得兩個表之間的左聯接的結果,兩個表都具有同名的列,即我聯接的列。 以下查詢被SQL Server中的導入/導出向導視為有效,但始終會給出錯誤。 我還有其他條件,因此大小不會太大。 我們使用的是SQL Server 2000 iirc,並且由於使用的是外部開發的程序來與數據庫進行交互(除了一些無法以這種方式檢索的信息),我們不能簡單地更改列名。

SELECT table1.*, table2.* 
FROM table1 
LEFT JOIN table2 ON table1.samename = table2.samename

至少,我認為列名有問題,還是我做錯了其他事?

具有相同名稱的不僅僅是您的聯接鍵的列嗎? 如果只有您的聯接鍵具有相同的名稱,則只需選擇其中之一,因為除了不匹配的行(NULL)之外,這些值將是等效的。 不過,您將不得不枚舉其中一個表中的所有其他列。

SELECT table2.samename,table1.othercolumns,table2.*
FROM table1 
LEFT JOIN table2 ON table1.samename = table2.samename

您可能需要顯式列出其中一個表(具有較少字段的表)中的列,而忽略第二個重復字段的實例。

select Table1.*, {skip the field Table2.sameName} Table2.fld2, Table2.Fld3, Table2.Fld4...  from

由於它是一個公共列,因此它似乎試圖在結果集中創建兩次,從而使您的過程停滯不前。

由於永遠不要使用select *,只需將其替換為所需列的列名即可。 連接的列在連接的兩邊都具有相同的值(或為null),因此請僅從表1中選擇一個將始終具有該值的一個。

如果要從兩個表中選擇所有列,請使用Select *而不是單獨包括這些表。 但是,這將使您在結果集中留有重復的列名,因此即使按名稱讀出它們也不起作用,而按索引讀取它們也會產生不一致的結果,因為更改數據庫中的列將更改結果集,從而破壞了任何代碼在列的序號上。

不幸的是,最好的解決方案是准確地指定所需的列,並為重復項創建別名,使它們唯一。

我通過將查詢設置為文本模式並復制第一行來快速獲得列標題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM