SQL寫法 → 同個表格 SELECT 很多次,都不同條件

是真的要一直重複下 SQL 嗎?

還是能夠下一次 SQL,

然後把內容都寫在裡面,

最後全部跑出來結果。

共 11 則回應

妳要不要描述的更詳細一點?
應該可以用子查詢來下SQL

Select A.attr1,B.attr2
FROM
(

Select attr1 FROM TABLE WHERE XXX AS A
,
Select attr2 FROM TABLE WHERE XXX AS B
)

(該死按錯分兩篇PO)
描述詳細一點~~
我要連續對同個表格 A,
做大約 300 次的計算總數,
每次都是後面的條件不同,
差一點點而已,
我是想說把 300 次都串在同個 SQL,
只連線一次,
就把結果搜尋出來結果。

select count(*)
from A
where 1 = 1
and B = '3'
and C = '4'

select count(*)
from A
where 1 = 1
and B = '4'
and C = '5'

select count(*)
from A
where 1 = 1
and B = '9'
and C = '7'


以上三段各別執行可以,
我把兩段組再一起就不行了,
如下所示:

select count(*) as AA,
(select count(*)
from A
where 1 = 1
and B = '4'
and C = '5'
) as BB
from A
where 1 = 1
and B = '9'
and C = '7'

可以把那些條件全部or起來
這樣只要一次SQL就夠了
select count(*) from A where (條件1) or (條件2) or (條件3)......
政治學系也會SQL
高手在民間~阿

select count(*)
from A
group by (B,C)
where COND1 or COND2(這部分只能用CODE 去串接299次
你是要的結果是300rows
還是1筆row 300columns?

300rows可以用union all串300個SQL
300columns比較難,oracle db可以用decode或case把where條件改寫,其它db另請高明
你應該觀察一下這一大堆的讀取是要讀取什麼

如果這次讀取是對一張table 拿出了幾乎100%的資料

我建議你就直接select * from table就好了

剩下用程式做運算 不要都依賴sql

程式大概是..

int array[][];

foreach data in output{
array[data.B][data.C]++;
}


300筆這種資料...

where 1 = 1
and B = '3'
and C = '4'

這些不同的條件的數字
是否可以用數學式子來表示?
或者彼此之間沒有任何關係?

btw,如果真的有這麼多不同的條件
可以先把sql的指令用個string來表示
然後把條件用array存起來 再append到sql的string上面
例如
string sql_string="select count(*) from A where"
array conditions={"condition1","condition2","condition3".....}
foreach conditions as c
sql_string+=c
if(c!=conditions.last)
sql_string+=" or "
sql->query(sql_string)

這樣寫的程式擴充性會比較好
之後要修改或套用到其他地方也比較方便


或者,如8樓所說
如果執行全部sql的cost大於把表格ㄧ次整個抓下來的cost
那直接抓下來再處理資料會比較快
突然發現在這邊貼code不能縮牌
更正一下

string sql_string="select count(*) from A where"
array conditions={"condition1","condition2","condition3".....}
foreach( conditions as c){
sql_string+=c
if(c!=conditions.last){
sql_string+=" or "
}
}
sql->query(sql_string)
建議還是寫個for 迴圈 分開去select吧!

不然你讀出來還是要分析資料。
馬上回應搶第 12 樓...