PCDVD數位科技討論區
PCDVD數位科技討論區   註冊 常見問題 標記討論區為已讀

回到   PCDVD數位科技討論區 > 其他群組 > 七嘴八舌異言堂
帳戶
密碼
 

回應
 
主題工具
kiten
*停權中*
 
kiten的大頭照
 

加入日期: Apr 2005
文章: 17
SQL語法求助

假定一個tableA如下
f1 f2 f3
1 'a' '01'
2 'a' '01'
3 'b' '01'
4 'b' '02'
5 'a' '02'
6 'b' '02'
...................

條件為 (f2,f3) 屬於集合 ( ('a','01'),('b','01'),('b','02) )時挑出f1,f2,f3
我寫一個SQL如下
select f1,f2,f3 from tableA where (f2,f3) in ( ('a','01'),('b','01'),('b','02') );
出現了語法錯誤訊息
請問如何修改才能達成需求?
     
      
舊 2009-12-07, 08:45 AM #1
回應時引用此文章
kiten離線中  
tc1st910437
Major Member
 

加入日期: Apr 2002
文章: 184
我的直覺是這樣
select f1,f2,f3 from tableA where (f2,f3) in { ('a','01'),('b','01'),('b','02') };

不過還是請你把錯誤訊息整個貼出來才準
 

此文章於 2009-12-07 09:07 AM 被 tc1st910437 編輯.
舊 2009-12-07, 09:02 AM #2
回應時引用此文章
tc1st910437離線中  
orcish
Master Member
 
orcish的大頭照
 

加入日期: Nov 2002
您的住址: 熱火爐
文章: 2,289
select f1,f2,f3 from tableA where f2||'_'||f3 in('a_01','b_01','b_02')

這樣呢∼
__________________
舊 2009-12-07, 09:12 AM #3
回應時引用此文章
orcish離線中  
kiten
*停權中*
 
kiten的大頭照
 

加入日期: Apr 2005
文章: 17
引用:
作者tc1st910437
我的直覺是這樣
select f1,f2,f3 from tableA where (f2,f3) in { ('a','01'),('b','01'),('b','02') };

不過還是請你把錯誤訊息整個貼出來才準

我試過你改的語法,錯誤訊息和我原先的一樣
[Microsoft][ODBC SQL Server Driver][SQL Server]行 1: ','附近語法不正確
舊 2009-12-07, 09:17 AM #4
回應時引用此文章
kiten離線中  
kiten
*停權中*
 
kiten的大頭照
 

加入日期: Apr 2005
文章: 17
引用:
作者orcish
select f1,f2,f3 from tableA where f2||'_'||f3 in('a_01','b_01','b_02')

這樣呢∼

Bingo!這個解法可行
資料型態皆是字串是可以順利擺平
如果又混雜了如日期,數字,TrueFalse等型態時
我可能要用and 及 or等土法鍊鋼慢慢把條件寫完
不知有無更優美的寫法?
舊 2009-12-07, 09:23 AM #5
回應時引用此文章
kiten離線中  
orcish
Master Member
 
orcish的大頭照
 

加入日期: Nov 2002
您的住址: 熱火爐
文章: 2,289
用to_char

oracle有這語法,其他的得自行看看
__________________
舊 2009-12-07, 09:39 AM #6
回應時引用此文章
orcish離線中  
Devil
Power Member
 

加入日期: Jan 2001
您的住址: Taipei
文章: 503
select tableA.f1,tableA.f2,tableA.f3 from tableA
inner join
(
select 'a' as f2,'01' as f3
union
select 'b' as f2,'01' as f3
union
select 'b' as f2,'02' as f3
) as TableB
on TableA.f2 = TableB.f2 and TableA.f3 = TableB.f3
效能可能不怎麼樣,就只是看起來比較直覺而已
__________________
舊 2009-12-07, 09:40 AM #7
回應時引用此文章
Devil離線中  
kiten
*停權中*
 
kiten的大頭照
 

加入日期: Apr 2005
文章: 17
引用:
作者Devil
select tableA.f1,tableA.f2,tableA.f3 from tableA
inner join
(
select 'a' as f2,'01' as f3
union
select 'b' as f2,'01' as f3
union
select 'b' as f2,'02' as f3
) as TableB
on TableA.f2 = TableB.f2 and TableA.f3 = TableB.f3
效能可能不怎麼樣,就只是看起來比較直覺而已

這個寫法實在太黯然,太銷魂了
超過我的理解能力
舊 2009-12-07, 09:55 AM #8
回應時引用此文章
kiten離線中  
diolin
Basic Member
 

加入日期: Oct 2003
文章: 18
引用:
作者kiten
這個寫法實在太黯然,太銷魂了
超過我的理解能力


基本上, 這位大大是建立一個條件的 table, 再 join 它, 利用它當條件來篩選出符合的資料
舊 2009-12-07, 10:46 AM #9
回應時引用此文章
diolin離線中  


回應


POPIN
主題工具

發表文章規則
不可以發起新主題
不可以回應主題
不可以上傳附加檔案
不可以編輯您的文章

vB 代碼打開
[IMG]代碼打開
HTML代碼關閉



所有的時間均為GMT +8。 現在的時間是10:24 PM.


vBulletin Version 3.0.1
powered_by_vbulletin 2025。