台灣最大程式設計社群網站
線上人數
957
 
會員總數:246134
討論主題:189713
歡迎您免費加入會員
討論區列表 >> MS SQL >> SQL-select 資料表別名疑問
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
SQL-select 資料表別名疑問
價值 : 20 QP  點閱數:1067 回應數:2
樓主

紅龍
門外漢
0 1
18 1
發送站內信

-- SQL-select 資料表別名疑問
-- 要抓出重複的資料列來判斷
-- 重複的定義是同一天,同一客人,同業務,只能輸入一筆資料,2筆以上就是重複
-- 測試環境 MS SQL 2008 R2 EXPRESS + Win 7-32bit
-- 在看似雷同的SQL語法,卻有不同的答案,新手不得其解,盼先進同志加以指教
--
CREATE TABLE [dbo].[TestReInput] (
[日期] nvarchar(10),
[客戶] nvarchar(10),
[業務] nvarchar(10),
[內容] nvarchar(10)
)
-- 建立測試資料,共11筆
INSERT INTO TestReInput VALUES ('2015/12/01','001','AA','1')
INSERT INTO TestReInput VALUES ('2015/12/01','002','AA','1')
INSERT INTO TestReInput VALUES ('2015/12/02','001','AA','1')
INSERT INTO TestReInput VALUES ('2015/12/02','002','AA','1')
INSERT INTO TestReInput VALUES ('2015/12/02','002','AA','2')
INSERT INTO TestReInput VALUES ('2015/12/03','003','AA','1')
INSERT INTO TestReInput VALUES ('2015/12/03','003','AA','2')
INSERT INTO TestReInput VALUES ('2015/12/03','003','AA','3')
INSERT INTO TestReInput VALUES ('2015/12/05','001','AA','1')
INSERT INTO TestReInput VALUES ('2015/12/05','001','AA','2')
INSERT INTO TestReInput VALUES ('2015/12/05','002','AA','1')
-- 重複輸入的是'2015/12/02'有2筆,'2015/12/03'有3筆,'2015/12/05'有2筆,共7筆資料重複
-- 查詢1:
select * FROM [TestReInput] mm WHERE mm.[日期] In (
SELECT [日期] FROM [TestReInput]
WHERE [客戶] = [mm].[客戶] And [業務] = [mm].[業務]
GROUP BY [日期],[客戶],[業務]
HAVING Count(*)>1
) order by mm.[日期],mm.[客戶],mm.[業務]
--
-- 執行結果共7筆資料列列出來
--
-- 查詢2:
select * FROM [TestReInput] WHERE [日期] In (
SELECT mm.[日期] FROM [TestReInput] mm
WHERE [客戶] = [mm].[客戶] And [業務] = [mm].[業務]
GROUP BY mm.[日期],mm.[客戶],mm.[業務]
HAVING Count(*)>1
) order by [日期],[客戶],[業務]
--
-- 執行結果共9筆資料列列出來
--
-- 問題點:
-- 查詢2與查詢1的差別只是 mm 替代字擺在第一層資料表與第二層資料表處,為何執行結果會不一樣?
-- 尚請先進,撥空指教





搜尋相關Tags的文章: [ 資料表別名 ] ,
本篇文章發表於2015-12-21 16:00
1樓
最有價值解答

Hsu,Harry
檢舉此回應
針對[查詢2]分析如下:
本篇文章回覆於2015-12-22 09:42
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

紅龍
檢舉此回應
結論:查詢2中因為括號形成的第二層子句中未指定別名的欄位就是本身資料集,
所以 [客戶] = [mm].[客戶]就等於是 [mm].[客戶] = [mm].[客戶],
真是當局者迷∼
感謝指教!!
本篇文章回覆於2015-12-22 11:35
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.