沒事開始寫博客,留下以前工作中常用的筆記,內容不全或者需要補充的可以留言,我只寫我常用的。 網上很多類似動軟生成器的小工具,這類工具雖然在表關係複雜的時候沒什麼軟用,但是在一些簡單的表結構關係還是很方便的。想起以前開始工作的時候經常犯的錯誤。 現在就寫個簡單的錯誤,大神可能一眼就看出來了,不過新手需 ...
沒事開始寫博客,留下以前工作中常用的筆記,內容不全或者需要補充的可以留言,我只寫我常用的。
網上很多類似動軟生成器的小工具,這類工具雖然在表關係複雜的時候沒什麼軟用,但是在一些簡單的表結構關係還是很方便的。想起以前開始工作的時候經常犯的錯誤。
現在就寫個簡單的錯誤,大神可能一眼就看出來了,不過新手需要瞭解一下的。
Create table UC_counter
{
id INT IDENTITY(1, 1) PRIMARY KEY,
memberid int
}
Create table UC_member
{
id int ,
name nvarchar(50) ,
}
不討論這個表設計的合不合理,UC_counter的memberid 關聯的是UC_member的id
select (select top 1 name from UC_member a where a.memberid = id ) from UC_counter
很多代碼生成器查出數據時類似 select * from UC_counter的語句,自己只需輸入查出條件 ,查出內容(用過的應該知道,就不仔細說了),
上面那段代碼時想查出對應UC_member的那麼欄位, 不過會失望的。
上面那段代碼的可以翻譯成
select (select top 1 name from UC_member a where a.memberid = a.id ) from UC_counter
所以我會加個top 1,因為這樣子查詢可能會多條數據報錯,多個欄位相同伺服器辨別不出來,找尋的是最近一個表欄位,
正確的寫法:select (select top 1 name from UC_member a where a.memberid = b.id ) from UC_counter b
但是代碼生成器怎麼可能給你在表後面加別名,所以推薦那些想用代碼生成工具的人,建表的時候,表關係相連的表對應欄位名稱最好不同
Create table UC_counter
{
id INT IDENTITY(1, 1) PRIMARY KEY,
memberid int
}
Create table UC_member
{
Mid int ,
name nvarchar(50) ,
}
select (select top 1 name from UC_member a where a.memberid = Mid ) from UC_counter
這麼用的話就沒問題,這是突然想起來的問題,希望對不熟悉的人有幫助,以前純屬手打,寫的不夠詳細,可以留言。