存取二個資料表的問題 |
尚未結案
|
eko
一般會員 發表:21 回覆:36 積分:11 註冊:2004-09-26 發送簡訊給我 |
大大好
小弟有二個表格
表格一:
產品資料表 p
產品編號 產品名稱 原價格
1001 name1 1
1002 name2 1
..
..
1011 name11 1 表格二:
價格暫存表 s
客戶編號 產品編號 上次售出價格
301 1001 2
301 1002 2 當小弟選擇某客戶時
要取出產品價格如下
產品名稱 產品原價格 產品上次價格
name1 1 2
name2 1 2
name3 1 0
..
..
產品資料表有所有的產品,但是價格暫存表不一定有
紀錄所有產品價格,也就是說暫存表可能有某客戶
產品1~10的價格,卻沒10以後的價格
小弟使用以下sql語法
SELECT p.pname,p.sp_s,s.price FROM product p,sprice_tmp s where (s.cid='301') group by p.pid
得出來結果如下
name1 1 2
name2 1 2
name3 1 2
...
當暫存表沒有相對應的產品時,應該給他0
請問這樣sql語法要怎麼下?
感謝!!
|
Wesly
中階會員 發表:14 回覆:103 積分:53 註冊:2002-05-31 發送簡訊給我 |
|
jimmy_wei
高階會員 發表:9 回覆:176 積分:147 註冊:2003-08-28 發送簡訊給我 |
|
eko
一般會員 發表:21 回覆:36 積分:11 註冊:2004-09-26 發送簡訊給我 |
引言: 如果你使用MSSQL, 可以如此 SELECT p.pname,p.sp_s,NullIf(s.price, 0) price FROM product p,sprice_tmp s Where (s.cid='301') group by p.pid小弟是使用mysql 剛剛也測試了這個語法 他出現的卻是 name price tmp_price ------------------------------ name1 1 1 name2 1 1 ... 也就是說本來如果暫存表沒這個pid 應該顯示0,現在卻是全部都顯示成1 所以還是不行..@@ |
eko
一般會員 發表:21 回覆:36 積分:11 註冊:2004-09-26 發送簡訊給我 |
|
Wesly
中階會員 發表:14 回覆:103 積分:53 註冊:2002-05-31 發送簡訊給我 |
|
eko
一般會員 發表:21 回覆:36 積分:11 註冊:2004-09-26 發送簡訊給我 |
引言: 我不知道下列方法可不可以, 你試試看吧, 因為我對MySQL不熟, 但在MSSQL下可執行的, 又卡到相容性的問題感謝幫忙 可以說快成功了 可是結果跟上一個一樣 可以得到資料表 問題是price欄位所得到的值都是 價格暫存表中的第一筆 如下: name price tmp_price 1001 1 1 1002 1.2 1 1003 3 1 ... ^^^這裡所抓的都是s.price的第一筆 怎麼辦?不行的話只好拆成二個SQL查詢 再用陣列結合在一起SELECT p.pname,p.sp_s, case when s.price is null then 0 else s.price end price FROM product p,sprice_tmp s Where (s.cid='301') group by p.pid |
Wesly
中階會員 發表:14 回覆:103 積分:53 註冊:2002-05-31 發送簡訊給我 |
|
eko
一般會員 發表:21 回覆:36 積分:11 註冊:2004-09-26 發送簡訊給我 |
引言: SELECT p.pname,p.sp_s, case when s.price is null then 0 else s.price end price FROM product p Left Join sprice_tmp s on p.產品編號=s.產品編號 and s.cid='301' Order p.產品編號 都是取得第一筆資料, 是因為沒有配對的問題感謝大大阿 真的可以正確耶 (order p.pid 要改 order by p.pid就可以正確run) 不過小弟還是看不太懂這sql語法耶... 不嫌小弟囉嗦的話 可以解釋一下嗎? |
Wesly
中階會員 發表:14 回覆:103 積分:53 註冊:2002-05-31 發送簡訊給我 |
有空多看看SQL的書, 看看別人的語法如何下, 一定對你的實力有所增進.
case when s.price is null then 0 <--當為空值時給0 else s.price <--不為0時則依原值顯示 end price Left Join sprice_tmp s on p.產品編號=s.產品編號 and s.cid='301' <--Left Join 以左方為準的對映, s.cid='301' 只顯示'301'者 Order by p.pid <--以p.pid表示排序欄位 |
eko
一般會員 發表:21 回覆:36 積分:11 註冊:2004-09-26 發送簡訊給我 |
引言: 有空多看看SQL的書, 看看別人的語法如何下, 一定對你的實力有所增進.因為沒用過left join..所以... 謝謝啦..我會更努力的..case when s.price is null then 0 <--當為空值時給0 else s.price <--不為0時則依原值顯示 end price Left Join sprice_tmp s on p.產品編號=s.產品編號 and s.cid='301' <--Left Join 以左方為準的對映, s.cid='301' 只顯示'301'者 Order by p.pid <--以p.pid表示排序欄位 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |