不好意思,小弟自己研究很久了,先聲明這不是功課,是小弟研究股票,只不過放在資料庫中,想把它抓出來利用一下!
共有三個表,小弟想併成一個,像中間那一個,可是小弟最後只併成最後一個語法如下:

slect a.*,b.*,c.* from AAA a left join BBB b on a.代號=b.代號 left join CCC C on a.代號=c.代號 where a.日期='2009/4/1'

不知道有哪一個高人可以指點一下,小弟買書試了好久,left join , right join ,還有一般常用的where等語法,可是還是無法解決,不知道常用sql的高手,指點小弟迷津,謝謝


SQL資料表合併
文章關鍵字
硬要寫在一行SQL需要用到outer join,
或是3行insert into解決.


SELECT '2009-04-01' AS '日期', 1101 AS '代號', 10 AS '收盤'
INTO AAA
UNION
SELECT '2009-04-01', 1102, 20
UNION
SELECT '2009-04-01', 1103, 12
UNION
SELECT '2009-04-01', 1104, 11
UNION
SELECT '2009-04-01', 1105, 18
UNION
SELECT '2009-04-01', 1106, 12
UNION
SELECT '2009-04-01', 1107, 16



SELECT '2009-04-01' AS '日期', 1101 AS '代號', 3999 AS '融資'
INTO BBB
UNION
SELECT '2009-04-01', 1102, 1565
UNION
SELECT '2009-04-01', 1103, 2147
UNION
SELECT '2009-04-01', 1104, 8569



SELECT '2009-04-01' AS '日期', 1104 AS '代號', 12100 AS '三大法人'
INTO CCC
UNION
SELECT '2009-04-01', 1105, 526
UNION
SELECT '2009-04-01', 1106, 0
UNION
SELECT '2009-04-01', 1107, 2700


SELECT
a.日期
,a.代號
,a.收盤
,ISNULL(CAST(b.融資 AS VARCHAR), '') AS '融資'
,ISNULL(CAST(c.三大法人 AS VARCHAR), '') AS '三大法人'
FROM AAA a
LEFT JOIN BBB b
ON a.日期 = b.日期
AND a.代號 = b.代號
LEFT JOIN CCC c
ON a.日期 = c.日期
AND a.代號 = c.代號


SELECT
a.日期
,a.代號
,a.收盤
,ISNULL(CAST(b.融資 AS VARCHAR), '') AS '融資'
,ISNULL(CAST(c.三大法人 AS VARCHAR), '') AS '三大法人'
FROM AAA a
INNER JOIN BBB b
ON a.日期 = b.日期
AND a.代號 = b.代號
INNER JOIN CCC c
ON a.日期 = c.日期
AND a.代號 = c.代號
試試卡氏乘積吧
select 日期,代號,收盤,融資,三大法人 from AAA,BBB,CCC whee AAA.代號=BBB.代號=CCC.代號
作會計這一行 , 很久沒碰SQL了 ,有點生疏
試試卡氏乘積吧 select 日期,代號,收盤,融資,三大法人 from AAA,BBB,CCC whee AAA.代號=BBB.代號=CCC.代號 作會計這一行 , 很久沒碰SQL了 ,有點生疏

晚上回家我來試試看,謝謝提供小弟方向
小弟用卡氏乘積,作出來的不對

另個大大所提的,小弟看一下,如果資料很多上千檔,這樣好像也做不完

不知還有高手可以指導嗎?

===================
小弟研究後,只覺得應該是left join可是資料數,合併後卻越來越少

AAA表有1200排
BBB表有1100排
CCC表有1000排

三個表用left join後卻變成1000排,和所遇其的1200有差異

可以指導一下嗎?






邏輯對的話,和資料量大小沒關係
頂多是效率問題,
且幾千筆的資料對資料庫來說是非常的少
joey0415 wrote:
小弟研究後,只覺得應該是left join可是資料數,合併後卻越來越少

AAA表有1200排
BBB表有1100排
CCC表有1000排

三個表用left join後卻變成1000排,和所遇其的1200有差異

可以指導一下嗎?(恕刪)


會少的原因是JOIN的指令

例如AAA有1101,1102,1104
BBB有1101,1103,1104


如果是AAA LIFT JOIN BBB
1103就會不見,因為AAA沒有1103

如果是AAA RIGHT JOIN BBB(等於BBB LIFT JOIN AAA)
1102會不見,因為BBB沒有1102

使用Left或Right沒有批配的都會被踢掉

你要使用的是FULL JOIN,沒有批配的會放空值

或者另外建一個所有股票的代碼的資料表,然後其他的資料表去JOIN這個資料表
Wesley Hsu wrote:
會少的原因是JOIN的指令

例如AAA有1101,1102,1104
BBB有1101,1103,1104


如果是AAA LIFT JOIN BBB
1103就會不見,因為AAA沒有1103

如果是AAA RIGHT JOIN BBB(等於BBB LIFT JOIN AAA)
1102會不見,因為BBB沒有1102

使用Left或Right沒有批配的都會被踢掉

你要使用的是FULL JOIN,沒有批配的會放空值

或者另外建一個所有股票的代碼的資料表,然後其他的資料表去JOIN這個資料表


應該是個好方法,我來試試看

人氣多的網站,問問題都有高手相救

謝謝
文章分享
評分
評分
複製連結

今日熱門文章 網友點擊推薦!