กระทู้เก่าบอร์ด อ.Yeadram
2,037 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 แบบไหนคะ ขอบคุณมากๆค่ะ
ตาราง 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
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
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 สามารถทำได้หรือไม่คะ
ถ้ามี สามตาราง สมมติให้เป็น 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)
ปรับใช้ดูครับ
ปล. ไม่รู้ว่าการออกแบบถามของคุณจะต่อแบบนี้ไปเรื่อยๆทุกปีหรือไม่ หากใช่ผมไม่แน่ใจว่ามันจะมีวิธีการที่ยืดหยุ่นกว่านี้หรือเปล่า (ต้องลองรบกวนอาจารย์ท่านอื่นดูครับ) เพราะถ้าต้องมาเขียนต่ออย่างนี้ทุกๆปี ผมว่าไม่ใช่วิธีที่ยืดหยุ่นเลยนะครับ
อื่ม เอาแบบเป็นตัวอย่างง่ายๆ ก็
ตอนแรกที่ให้ตัวอย่างไปแบบนี้
---------------------------------------------------------------------------
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)
ผมไม่เคยลองทำนะครับแค่ลองคิดดูว่าน่าจะทำได้ครับ
1. เก็บข้อมูล name
2. เก็บข้อมูลแต่ละปี โดยให้มี Column name ,year ,amount
เมื่อต้องการดูข้อมูลให้สร้าง query แบบ Crosstab (ให้ปีมาเป็น column)
ผมไม่เคยลองทำนะครับแค่ลองคิดดูว่าน่าจะทำได้ครับ
6 @R21311
ทำได้แล้วคะ join 2 ตารางก่อน แล้วสร้างเป็นตารางใหม่ แล้วค่อยเอามา join กับอีกตารางคะ
งงๆ หน่อย แต่ก็เรียบร้อยแล้ว
ขอบคุณทุกความเห็นมากคะ
งงๆ หน่อย แต่ก็เรียบร้อยแล้ว
ขอบคุณทุกความเห็นมากคะ
Time: 0.2479s
แต่ใน 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 แล้วกลับตารางกัน ก็จะได้ค่าเหมือนกัน แล้วแต่ถนัดครับ
ประมาณนี้ครับ ลองดูครับ