สอบถามเรื่องการ join table ค่ะ
กระทู้เก่าบอร์ด อ.Yeadram

 1,944   6
URL.หัวข้อ / URL
สอบถามเรื่องการ join table ค่ะ

มีข้อมูล สองตารางค่ะ
ตาราง 1    2556
----------------------------------
ID    name    total2556
---------------------------------
1     aaaaa    50
2     bbbbb    30
3     cccccc    25


ตาราง 2    2557
----------------------------------
ID    name    total2557
---------------------------------
1     aaaaa    15
3     cccccc    40
4     ddddd     8


ต้องการ join ตารางให้เป็นแบบนี้ค่ะ
----------------------------------
ID    name    total2556     total2557
---------------------------------
1     aaaaa    50                  15
2     bbbbb    30       
3     cccccc    25                  40
4     ddddd                           8

ไม่ทราบว่าต้องเขียน join แบบไหนคะ ขอบคุณมากๆค่ะ

6 Reply in this Topic. Dispaly 1 pages and you are on page number 1

1 @R20286
ลักษณะแบบนี้น่าจะเป็น FULL JOIN นะครับ
แต่ใน MS Access ไม่มี FULL JOIN มีแต่
INNER JOIN
LEFT JOIN
RIGHT JOIN

แต่ก็คือสามารถใช้ LEFT หรือ RIGHT JOIN มา UNION กัน 2 ครั้งก็จะเป็น FULL JOIN ได้เหมือนกันครับ

สมมุติตารางชื่อ Table1 และ Table2
---------------------------------------------------------------------------
SELECT T1.id, T1.Name, T1.total2556, T2.total2557
FROM Table1 as T1
LEFT JOIN Table2 as T2
ON T1.Id = T2.Id

UNION

SELECT T2.id, T2.Name, T1.total2556, T2.total2557
FROM Table1 as T1
RIGHT JOIN Table2 as T2
ON T1.Id = T2.Id

ORDER BY T1.id
-----------------------------------------------------------------------------

- จริงๆจะใช้ LEFT UINON LEFT หรือ RIGHT UNION RIGHT แล้วกลับตารางกัน ก็จะได้ค่าเหมือนกัน แล้วแต่ถนัดครับ

ประมาณนี้ครับ ลองดูครับ
2 @R20290
อีกแบบครับ
Union ก่อน แล้วค่อย Join

Select u.ID, u.Name, Total2556, Total2557
From
(
(
Select ID, Name
From t1
Union
Select ID, Name
From t2
) u
Left Join t1
On u.ID = t1.ID
)
Left Join t2
On u.ID = t2.ID
Order By u.ID
3 @R21251
ขอรบกวนสอบถามเพิ่มเติมค่ะ
ถ้ามี สามตาราง สมมติให้เป็น 58 ให้ผลเป็นแบบนี้
----------------------------------
ID    name    total2556     total2557   total2558
---------------------------------
1     aaaaa    50                  15                 1
2     bbbbb    30                                       2
3     cccccc    25                  40
4     ddddd                           8
5     eeeee                                                5

แบบนี้ใน access สามารถทำได้หรือไม่คะ
4 @R21269
ถ้าเป็น 3 ตารางขึ้นไป ต้องทำที่ละ 2 ก่อน แล้วต่ออีกทีครับ
อื่ม เอาแบบเป็นตัวอย่างง่ายๆ ก็
ตอนแรกที่ให้ตัวอย่างไปแบบนี้
---------------------------------------------------------------------------
SELECT T1.id, T1.Name, T1.total2556, T2.total2557
FROM Table1 as T1
LEFT JOIN Table2 as T2
ON T1.Id = T2.Id

UNION

SELECT T2.id, T2.Name, T1.total2556, T2.total2557
FROM Table1 as T1
RIGHT JOIN Table2 as T2
ON T1.Id = T2.Id

ORDER BY T1.id
-----------------------------------------------------------------------------
คุณก็เซฟคิวรี่ สมมุติชื่อ Q1
จากนั้นคุณก็สร้างคิวรี่ใหม่อีกตัวครับ แล้วก็เขียนแบบนี้
-----------------------------------------------------------------------------
SELECT T1.id, T1.Name, T2.total2556, T2.total2557 ,T1.total2558
FROM Table3 as T1
LEFT JOIN Q1 as T2
ON T1.Id = T2.Id

UNION

SELECT T2.id, T2.Name, T2.total2556, T2.total2557, T1.total2558
FROM Table3 as T1
RIGHT JOIN Q1 as T2
ON T1.Id = T2.Id

ORDER BY id
-----------------------------------------------------------------------------

ก็น่าจะได้ตามต้องการนะครับ

แต่หากต้องการคิวรี่เดียวเลย ก็จะได้ประมาณนี้ครับ
-----------------------------------------------------------------------------
SELECT T3.id, T3.Name, T2.total2556, T2.total2557 ,T3.total2558
FROM Table3 as T3
LEFT JOIN

(SELECT T1.id, T1.Name, T1.total2556, T2.total2557
FROM Table1 as T1
LEFT JOIN Table2 as T2
ON T1.Id = T2.Id
UNION
SELECT T2.id, T2.Name, T1.total2556, T2.total2557
FROM Table1 as T1
RIGHT JOIN Table2 as T2
ON T1.Id = T2.Id) as T2
ON T3.Id = T2.Id

UNION

SELECT T2.id, T2.Name, T1.total2556, T2.total2557, T3.total2558
FROM Table3 as T3
RIGHT JOIN
(SELECT T1.id, T1.Name, T1.total2556, T2.total2557
FROM Table1 as T1
LEFT JOIN Table2 as T2
ON T1.Id = T2.Id
UNION
SELECT T2.id, T2.Name, T1.total2556, T2.total2557
FROM Table1 as T1
RIGHT JOIN Table2 as T2
ON T1.Id = T2.Id) as T2
ON T3.Id = T2.Id

ORDER BY id
-----------------------------------------------------------------------------
ซึ่งก็จะเห็นว่า
Q1 ก็คือ
(SELECT T1.id, T1.Name, T1.total2556, T2.total2557
FROM Table1 as T1
LEFT JOIN Table2 as T2
ON T1.Id = T2.Id
UNION
SELECT T2.id, T2.Name, T1.total2556, T2.total2557
FROM Table1 as T1
RIGHT JOIN Table2 as T2
ON T1.Id = T2.Id)

ปรับใช้ดูครับ

ปล. ไม่รู้ว่าการออกแบบถามของคุณจะต่อแบบนี้ไปเรื่อยๆทุกปีหรือไม่ หากใช่ผมไม่แน่ใจว่ามันจะมีวิธีการที่ยืดหยุ่นกว่านี้หรือเปล่า (ต้องลองรบกวนอาจารย์ท่านอื่นดูครับ) เพราะถ้าต้องมาเขียนต่ออย่างนี้ทุกๆปี ผมว่าไม่ใช่วิธีที่ยืดหยุ่นเลยนะครับ
5 @R21271
สร้างเป็น 2 ตารางแบบนี้ดีมั้ยครับ
1. เก็บข้อมูล name

2. เก็บข้อมูลแต่ละปี โดยให้มี Column name ,year ,amount
เมื่อต้องการดูข้อมูลให้สร้าง query แบบ Crosstab (ให้ปีมาเป็น column)

ผมไม่เคยลองทำนะครับแค่ลองคิดดูว่าน่าจะทำได้ครับ
6 @R21311
ทำได้แล้วคะ join 2 ตารางก่อน แล้วสร้างเป็นตารางใหม่ แล้วค่อยเอามา join กับอีกตารางคะ
งงๆ หน่อย แต่ก็เรียบร้อยแล้ว
ขอบคุณทุกความเห็นมากคะ
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.3202s