PCDVD數位科技討論區

PCDVD數位科技討論區 (https://www.pcdvd.com.tw/index.php)
-   七嘴八舌異言堂 (https://www.pcdvd.com.tw/forumdisplay.php?f=12)
-   -   SQL語法求助 (https://www.pcdvd.com.tw/showthread.php?t=878344)

kiten 2009-12-07 08:45 AM

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') );
出現了語法錯誤訊息
請問如何修改才能達成需求?

tc1st910437 2009-12-07 09:02 AM

我的直覺是這樣
select f1,f2,f3 from tableA where (f2,f3) in { ('a','01'),('b','01'),('b','02') };

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

orcish 2009-12-07 09:12 AM

select f1,f2,f3 from tableA where f2||'_'||f3 in('a_01','b_01','b_02')

這樣呢∼

kiten 2009-12-07 09:17 AM

引用:
作者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: ','附近語法不正確

kiten 2009-12-07 09:23 AM

引用:
作者orcish
select f1,f2,f3 from tableA where f2||'_'||f3 in('a_01','b_01','b_02')

這樣呢∼

Bingo!這個解法可行
資料型態皆是字串是可以順利擺平
如果又混雜了如日期,數字,TrueFalse等型態時
我可能要用and 及 or等土法鍊鋼慢慢把條件寫完
不知有無更優美的寫法?

orcish 2009-12-07 09:39 AM

用to_char

oracle有這語法,其他的得自行看看

Devil 2009-12-07 09:40 AM

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
效能可能不怎麼樣,就只是看起來比較直覺而已

kiten 2009-12-07 09:55 AM

引用:
作者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
效能可能不怎麼樣,就只是看起來比較直覺而已

這個寫法實在太黯然,太銷魂了
超過我的理解能力

diolin 2009-12-07 10:46 AM

引用:
作者kiten
這個寫法實在太黯然,太銷魂了
超過我的理解能力


基本上, 這位大大是建立一個條件的 table, 再 join 它, 利用它當條件來篩選出符合的資料


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

vBulletin Version 3.0.1
powered_by_vbulletin 2025。