全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1100
推到 Plurk!
推到 Facebook!

存取二個資料表的問題

尚未結案
eko
一般會員


發表:21
回覆:36
積分:11
註冊:2004-09-26

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-03-18 19:49:34 IP:218.171.xxx.xxx 未訂閱
大大好 小弟有二個表格 表格一: 產品資料表 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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-03-18 20:09:19 IP:60.248.xxx.xxx 未訂閱
如果你使用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
jimmy_wei
高階會員


發表:9
回覆:176
積分:147
註冊:2003-08-28

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-03-18 20:10:29 IP:210.68.xxx.xxx 未訂閱
SELECT p.pname,p.sp_s, nvl(s.price, 0) price  
FROM product p, sprice_tmp s 
where p.prod_no = s.prod_no(+) <--這個+是半型的....
and s.cid='301' 
group by p.pid
eko
一般會員


發表:21
回覆:36
積分:11
註冊:2004-09-26

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-03-18 20:57:21 IP:218.171.xxx.xxx 未訂閱
引言: 如果你使用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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-03-19 12:08:32 IP:218.171.xxx.xxx 未訂閱
小弟應該換個方式問 其實說穿了就是要取出產品資料表的(二個欄位) 名稱 and 價格 (select pname,price from product) 然後要存取某個客戶價格暫存表(一個欄位) (select tmp_price from tmp_price_table where cid='客戶1') 然後小弟想把二個結果join在一起 想得到三個欄位 pname price tmp_price 不知道這樣大家會不會比較清楚@@
Wesly
中階會員


發表:14
回覆:103
積分:53
註冊:2002-05-31

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-03-21 08:39:19 IP:220.140.xxx.xxx 未訂閱
我不知道下列方法可不可以, 你試試看吧, 因為我對MySQL不熟, 但在MSSQL下可執行的, 又卡到相容性的問題
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
eko
一般會員


發表:21
回覆:36
積分:11
註冊:2004-09-26

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-03-21 12:48:04 IP:218.171.xxx.xxx 未訂閱
引言: 我不知道下列方法可不可以, 你試試看吧, 因為我對MySQL不熟, 但在MSSQL下可執行的, 又卡到相容性的問題
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
感謝幫忙 可以說快成功了 可是結果跟上一個一樣 可以得到資料表 問題是price欄位所得到的值都是 價格暫存表中的第一筆 如下: name price tmp_price 1001 1 1 1002 1.2 1 1003 3 1 ... ^^^這裡所抓的都是s.price的第一筆 怎麼辦?不行的話只好拆成二個SQL查詢 再用陣列結合在一起
Wesly
中階會員


發表:14
回覆:103
積分:53
註冊:2002-05-31

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-03-22 10:11:04 IP:218.170.xxx.xxx 未訂閱
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.產品編號 都是取得第一筆資料, 是因為沒有配對的問題
eko
一般會員


發表:21
回覆:36
積分:11
註冊:2004-09-26

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-03-22 20:15:23 IP:218.171.xxx.xxx 未訂閱
引言: 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

發送簡訊給我
#10 引用回覆 回覆 發表時間:2005-03-24 20:02:48 IP:60.248.xxx.xxx 未訂閱
有空多看看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

發送簡訊給我
#11 引用回覆 回覆 發表時間:2005-03-24 21:07:27 IP:218.171.xxx.xxx 未訂閱
引言: 有空多看看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表示排序欄位
因為沒用過left join..所以... 謝謝啦..我會更努力的..
系統時間:2024-06-01 19:06:10
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!