台灣最大程式設計社群網站
線上人數
972
 
會員總數:246134
討論主題:189713
歡迎您免費加入會員
討論區列表 >> MS SQL >> 取得不符篩選條件的所有資料
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
取得不符篩選條件的所有資料
價值 : 50 QP  點閱數:752 回應數:10
樓主

HB
中級專家
3028 74
3777 351
發送站內信

採用MS SQL 2005系統,有2個資料表,分別為A, B, 各有3各欄位,分別為C1, C2, C3。

利用下述T-Sql可以取得3個欄位資料相同的A所有資料:
select i.* from [dbo].[A] as i left join [dbo].[B] as u
on i.[C1] = u.[C1] and i.[C2] = u.[C2] and i.[C3] = u.[C3]
where i.[C1] <> 'AAA' and u.[C2] = 'TYPE'

請問上述T-Sql如何修正,可以取得不符上述條件的A所有資料。
謝謝!





搜尋相關Tags的文章: [ 資料篩選 ] ,
本篇文章發表於2018-08-02 21:58
1樓
回應

P陳
檢舉此回應
試試 加個 NOT
select i.* from [dbo].[A] as i left join [dbo].[B] as u
on i.[C1] = u.[C1] and i.[C2] = u.[C2] and i.[C3] = u.[C3]
where not ( i.[C1] <> 'AAA' and u.[C2] = 'TYPE')


select i.* from [dbo].[A] as i left join [dbo].[B] as u
on i.[C1] = u.[C1] and i.[C2] = u.[C2] and i.[C3] = u.[C3]
where i.[C1] = 'AAA' or u.[C2] <> 'TYPE'

本篇文章回覆於2018-08-02 22:50
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
回應

Bobby
檢舉此回應
反向思考的話
可以試試用A的 pkey 過濾
(pkey欄位請自行置換)


本篇文章回覆於2018-08-03 11:08
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
作者回應

HB
檢舉此回應
感謝二位大大的說明,先測試看看,有問題再上來問!
本篇文章回覆於2018-08-06 07:41
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
作者回應

HB
檢舉此回應
測試後,發現不是預期的結果。

目前假設資料如下:
Table A
C1 C2 C3 編號
BBB TYPE T1 1
BBB TYPE T1 2
BBB TYPE T1 3
BBB TYPE   4
BBB TYPE   5
AAA TYPE   6
AAA TYPE   7

Table B
C1 C2 C3  
BBB TYPE T1  
BBB TYPE T2

如果拿掉where i.[C1] <> 'AAA' and i.[C2] = 'TYPE' 的條件後,希望能取得Table A編號4, 5, 6, 7的資料,請問T-Sql需要如何修正?
謝謝!
本篇文章回覆於2018-08-07 20:10
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
回應

Bobby
檢舉此回應

本篇文章回覆於2018-08-07 23:05
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
作者回應

HB
檢舉此回應
感謝Bobby的再次說明。

提供之語法可以達成所需,但是拿掉Where條件後,發現沒有產出資料。

能否只列出i.[C1] = u.[C1] and i.[C2] = u.[C2] and i.[C3] = u.[C3] 以外的所有A的資料?
包括i.[C3]為Null時,也需列出。
謝謝!
本篇文章回覆於2018-08-08 19:39
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
回應

Bobby
檢舉此回應
請將 left join 改為 inner join


本篇文章回覆於2018-08-08 19:47
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
8樓
作者回應

HB
檢舉此回應
感謝Bobby的再次說明。

但是衍申另一問題,Table A及B的C3若為Null時,無法篩選。

亦即若在Table B加入一筆BBB TYPE,C3為Null時,如何只列出編號6, 7的資料?
謝謝!
本篇文章回覆於2018-08-09 12:30
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
9樓
最有價值解答

Bobby
檢舉此回應
如果 table 內資料沒有空字串(''), 只有Null的話
可以使用 isnull, 但會破壞索引的使用


本篇文章回覆於2018-08-09 12:49
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
10樓
作者回應

HB
檢舉此回應
再次感謝Bobby的協助。
本篇文章回覆於2018-08-10 07:09
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

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