กระทู้เก่าบอร์ด อ.Yeadram
2,347 9
URL.หัวข้อ /
URL
ขอคำแนะนำเรื่อง SQL ด้วยครับ
ข้อมูลตาราง 2 ตารางตามข้างล่างนี้
table 1
id s1 s2 t1 t2 t3
01 0 3 3 c1 e001
01 0 3 3 c2 e001
02 3 0 0 c1 e002
table 2
id s1 s2 t1 t2 t3
01 3 3 3 c1 e001
01 3 3 3 c2 e001
02 3 5 5 c1 e002
ต้องการ update table 1 โดยเอาข้อมูลจาก table 2 นะครับ
ช่วยแนะนำการเขียน SQL หน่อยครับ ขอบคุณครับ
หมายเหตุ
ผมลองเขียน sql subquery ดังนี้แต่ไม่ได้ครับ
update table1 set
s1=(select s1 from table1.s1=table2.s1)
where
table1.t3 in(select t3 from table 2) แบบนี้ใช้ไม่ได้ครับ
table 1
id s1 s2 t1 t2 t3
01 0 3 3 c1 e001
01 0 3 3 c2 e001
02 3 0 0 c1 e002
table 2
id s1 s2 t1 t2 t3
01 3 3 3 c1 e001
01 3 3 3 c2 e001
02 3 5 5 c1 e002
ต้องการ update table 1 โดยเอาข้อมูลจาก table 2 นะครับ
ช่วยแนะนำการเขียน SQL หน่อยครับ ขอบคุณครับ
หมายเหตุ
ผมลองเขียน sql subquery ดังนี้แต่ไม่ได้ครับ
update table1 set
s1=(select s1 from table1.s1=table2.s1)
where
table1.t3 in(select t3 from table 2) แบบนี้ใช้ไม่ได้ครับ
9 Reply in this Topic. Dispaly 1 pages and you are on page number 1
1 @R01190
ในเมื่อ SQL Statement ที่ให้มานั้นผิด แล้วเงื่อนไขที่ถูกต้องคืออะไร บอกมาให้ชัดเจนด้วย เช่น เทเบิล 1 และ 2 เชื่อมกันด้วยฟิลด์อะไร, เป็นลักษณะ one-to-one หรือ one-to-many, Where clause ต้องการเงื่อนไขอะไร
2 @R01191
เดานะครับ
มีีค่าเท่ากัน 3 Field สมมุติว่าเป็น Primary Key หรือ Forieng Key
เดาต่อนะครับ
table1 เก็บค่าเรื่มต้น table2 เก็บค่าที่มีการทำงานเปลี่ยนแปลง
เมื่อ table2 เปลี่ยนแล้วก็ต้องการ Updated ที่ table1 ให้ทันสมัยตาม
สมมุตินะครับ ถ้าเดาผิดไม่ว่ากันนะครับ
ตอนแรก table1 ค่าเท่ากับ table2
table2 เมื่อเปลี่ยนแปลง s1 s2 แล้ว จะรู้ได้ไงว่าเขาเปลี่ยนไปแล้วจะได้ เลือก record ที่จะไป Updated table1 ได้ถูกฝาถูกตัว
เอาแบบเท่าที่คิดได้ตอนนี้ก่อนก็แล้วกัน
table2 เมื่อเปลี่ยนแปลง s1 s2 แล้ว
ให้มี FeildUpdatedDate บันทึกว่าเปลี่ยนแปลงวันที่เท่าไร
ถึงเวลา Updated table1
Update table1 ที่ค่า PK เท่ากับ
SET table1.s1=table2.s1, table1.s2=table2.s2
WHERE table1.t3=table2.t3 AND table2.FeildUpdatedDate Not NULL
ลบ table2.FeildUpdatedDate เอาไว้บันทึกว่าเปลี่ยนแปลงวันที่เท่าไรใหม่
Updated table2 โดย ลบค่า FeildUpdatedDate ที่ี Not Null ให้ เท่ากับ Null
ถ้าทำแล้วสำเ้ร็จปรบมือให้ตัวเองได้เลยครับ
มีีค่าเท่ากัน 3 Field สมมุติว่าเป็น Primary Key หรือ Forieng Key
เดาต่อนะครับ
table1 เก็บค่าเรื่มต้น table2 เก็บค่าที่มีการทำงานเปลี่ยนแปลง
เมื่อ table2 เปลี่ยนแล้วก็ต้องการ Updated ที่ table1 ให้ทันสมัยตาม
สมมุตินะครับ ถ้าเดาผิดไม่ว่ากันนะครับ
ตอนแรก table1 ค่าเท่ากับ table2
table2 เมื่อเปลี่ยนแปลง s1 s2 แล้ว จะรู้ได้ไงว่าเขาเปลี่ยนไปแล้วจะได้ เลือก record ที่จะไป Updated table1 ได้ถูกฝาถูกตัว
เอาแบบเท่าที่คิดได้ตอนนี้ก่อนก็แล้วกัน
table2 เมื่อเปลี่ยนแปลง s1 s2 แล้ว
ให้มี FeildUpdatedDate บันทึกว่าเปลี่ยนแปลงวันที่เท่าไร
ถึงเวลา Updated table1
Update table1 ที่ค่า PK เท่ากับ
SET table1.s1=table2.s1, table1.s2=table2.s2
WHERE table1.t3=table2.t3 AND table2.FeildUpdatedDate Not NULL
ลบ table2.FeildUpdatedDate เอาไว้บันทึกว่าเปลี่ยนแปลงวันที่เท่าไรใหม่
Updated table2 โดย ลบค่า FeildUpdatedDate ที่ี Not Null ให้ เท่ากับ Null
ถ้าทำแล้วสำเ้ร็จปรบมือให้ตัวเองได้เลยครับ
3 @R01193
ก่อนอื่นต้องขอขอบคุณครับที่ตอบให้ พอดีไปต่างจังหวัดเพิ่งกลับมาตามกระทู้
นะครับ ต้องขอโทษด้วยครับ พอมาดูให้ละเอียดๆแล้ว ตรง systax sql ข้างบน
ขอเปลี่ยนใหม่ตามนี้ครับ
update table1 set
s1=(select s1 from table2 where table1.id=table2.id and table1.t3=table2.t3)
where
table1.t3 in(select t3 from table 2)
ความสัมพันธ์ของ table1 และ table2 ไม่มีครับ
สาเหตุก็คือ ผมได้ให้ user นำข้อมูลไปกรอกแยกสถานที่กัน
ทำให้ต้องมี 2 table ที่เหมือนๆกัน ความต้องการผมก็คือ
ต้องการนำข้อมูลมารวมกัน ให้เหลือแค่อันเดียวนะครับ
ตอนนี้ที่ผมทำก็คือทำการ import table จาก file อันนึง
เข้ามาแล้วเปลี่ยนชื่อเพื่อไม่ให้ซ้ำกัน แต่ติดปัญหว่าจะทำอย่างไร
จึงจะรวมกันได้ ขอบคุณมากๆครับ ไปค้นหาวิธีแก้มาหลายวิธี
แล้วครับ ยังไม่เจอเลย
นะครับ ต้องขอโทษด้วยครับ พอมาดูให้ละเอียดๆแล้ว ตรง systax sql ข้างบน
ขอเปลี่ยนใหม่ตามนี้ครับ
update table1 set
s1=(select s1 from table2 where table1.id=table2.id and table1.t3=table2.t3)
where
table1.t3 in(select t3 from table 2)
ความสัมพันธ์ของ table1 และ table2 ไม่มีครับ
สาเหตุก็คือ ผมได้ให้ user นำข้อมูลไปกรอกแยกสถานที่กัน
ทำให้ต้องมี 2 table ที่เหมือนๆกัน ความต้องการผมก็คือ
ต้องการนำข้อมูลมารวมกัน ให้เหลือแค่อันเดียวนะครับ
ตอนนี้ที่ผมทำก็คือทำการ import table จาก file อันนึง
เข้ามาแล้วเปลี่ยนชื่อเพื่อไม่ให้ซ้ำกัน แต่ติดปัญหว่าจะทำอย่างไร
จึงจะรวมกันได้ ขอบคุณมากๆครับ ไปค้นหาวิธีแก้มาหลายวิธี
แล้วครับ ยังไม่เจอเลย
4 @R01194
ไม่แน่้ใจครับว่าต้องการอะไรแน่
ดูที่ table1 record 1 และ 2 จะมี id=01 และ t3=e001 เหมือนกัน
ที table2 record 1 และ 2 ก็มี id=01 และ t3=e001
แล้ว record ทั้ง 2 จะไป update ตัวใดครับ ผมยังงงแลัว computer จะไปเหลืออะไร
เป็นไปไม่ได้ครับที่จะทำ ถ้า t2 กับ t3 ยังพอได้
ขอให้อะธิบายการทำงานให้ละเอียดกว่านี้นะครับจะได้ช่วยเหลือได้
(ถ้าจะเอาข้อมูลมาต่อกันก็ใช้ append นะครับไม่ต้อง update)
ดูที่ table1 record 1 และ 2 จะมี id=01 และ t3=e001 เหมือนกัน
ที table2 record 1 และ 2 ก็มี id=01 และ t3=e001
แล้ว record ทั้ง 2 จะไป update ตัวใดครับ ผมยังงงแลัว computer จะไปเหลืออะไร
เป็นไปไม่ได้ครับที่จะทำ ถ้า t2 กับ t3 ยังพอได้
ขอให้อะธิบายการทำงานให้ละเอียดกว่านี้นะครับจะได้ช่วยเหลือได้
(ถ้าจะเอาข้อมูลมาต่อกันก็ใช้ append นะครับไม่ต้อง update)
5 @R01195
ถ้าคุณต้องการ merge มารวมกัน ก็จะใช้คำสั่ง Insert นะครับ ไม่ใช่ Update
insert into table1(id,s1,s2,t1,t2,t3) select id,s1,s2,t1,t2,t3 from table2
insert into table1(id,s1,s2,t1,t2,t3) select id,s1,s2,t1,t2,t3 from table2
6 @R01196
การเอา table1 table2 เอาไปกรอกข้อมูลมา จะหาผลรวมของข้อมูล
อ่าน table1 ไปเก็บใน array 2 มิติเลยครับ
FOR J= 1 TO RecordCountTableA
FOR K=1 TO FieldCountTableA
s1(K)=s1
s2(K)=s2
t1(K)=t1
NEXT K
NEXT J
ในทำนองเดียวกันอ่าน table2 ไปเก็บใน array 2 มิติเช่นกัน ก็จะได้ค่า 2 Table รวมกันใน array แล้วเอา array มาเขียนกลับใน tableTmp อย่าไปทับ table1 นะครับเดียวหาต้นขั้วไม่เจอ
ห้ามลอกโค๊ด เพราะเป็นแนวคิดนะครัับ ไม่ได้เป็นโค๊ดจริง
อ่าน table1 ไปเก็บใน array 2 มิติเลยครับ
FOR J= 1 TO RecordCountTableA
FOR K=1 TO FieldCountTableA
s1(K)=s1
s2(K)=s2
t1(K)=t1
NEXT K
NEXT J
ในทำนองเดียวกันอ่าน table2 ไปเก็บใน array 2 มิติเช่นกัน ก็จะได้ค่า 2 Table รวมกันใน array แล้วเอา array มาเขียนกลับใน tableTmp อย่าไปทับ table1 นะครับเดียวหาต้นขั้วไม่เจอ
ห้ามลอกโค๊ด เพราะเป็นแนวคิดนะครัับ ไม่ได้เป็นโค๊ดจริง
7 @R01203
ที่นี่อบอ่นจังเลย ขอบคุณอีกเช่นกัน ขออธิบายเพิ่มอีกนะครับ
ตามที่คุณ Arsitkpnplus สอบถามว่าทำไม่ id ของ table ซ้ำกัน
เหตุก็คือ มันเป็น table ที่เก็บข้อมูล detail ของข้อมูลนะครับ
ลักษณะของข้อมูลจะเป็น one to many แต่เนื่องจากพอให้
user เอาโปรแกรมไปใช้คนละเครื่อง ผมเลยไม่รู้ว่า user
เขา update ข้อมูล record ใหนบ้าง ปัญหาที่เจอก็คือ ผมไม่รู้ว่า
จะ update ได้อย่างไร สังเกตที่ ทั้สอง table จะมี field ชื่อ
t2 เหมือนๆอันนี้ละครับที่เป็นหัวข้อที่ทั้งสองตารางเก็บไว้
เหมือนๆกัน สิ่งที่ผมต้องการคือจะเอาคะแนนของทั้สองตาราง
ที่เก็บอยู่ที่ s1 และ s1 มาเก็บให้เป็นตารางเดียวกันครับ
สำหรับแนวทางของคุณ wongsak น่าสนใจครับ แต่ตอนนี้
ที่อยากจะได้ขอเป็นคำสั่ง sql ดูก่อน ถ้าไม่ได้จริงๆคงต้อง
ลองเขียนดึงข้อมูลใส่ไปตรงๆอย่างที่แนะนำ ซึ่งจะเป็นงามเพิ่มขึ้นมาเยอะเลยครับ
ขอบคุณครับ
ขอให้โชคดีปีใหม่นี้ทุกๆท่านนะครับ ขอให้มีความสุขมากๆนะครับ
ตามที่คุณ Arsitkpnplus สอบถามว่าทำไม่ id ของ table ซ้ำกัน
เหตุก็คือ มันเป็น table ที่เก็บข้อมูล detail ของข้อมูลนะครับ
ลักษณะของข้อมูลจะเป็น one to many แต่เนื่องจากพอให้
user เอาโปรแกรมไปใช้คนละเครื่อง ผมเลยไม่รู้ว่า user
เขา update ข้อมูล record ใหนบ้าง ปัญหาที่เจอก็คือ ผมไม่รู้ว่า
จะ update ได้อย่างไร สังเกตที่ ทั้สอง table จะมี field ชื่อ
t2 เหมือนๆอันนี้ละครับที่เป็นหัวข้อที่ทั้งสองตารางเก็บไว้
เหมือนๆกัน สิ่งที่ผมต้องการคือจะเอาคะแนนของทั้สองตาราง
ที่เก็บอยู่ที่ s1 และ s1 มาเก็บให้เป็นตารางเดียวกันครับ
สำหรับแนวทางของคุณ wongsak น่าสนใจครับ แต่ตอนนี้
ที่อยากจะได้ขอเป็นคำสั่ง sql ดูก่อน ถ้าไม่ได้จริงๆคงต้อง
ลองเขียนดึงข้อมูลใส่ไปตรงๆอย่างที่แนะนำ ซึ่งจะเป็นงามเพิ่มขึ้นมาเยอะเลยครับ
ขอบคุณครับ
ขอให้โชคดีปีใหม่นี้ทุกๆท่านนะครับ ขอให้มีความสุขมากๆนะครับ
8 @R01205
ขอถามเพิ่มก่อนไปเที่ยวนะครับ
ตกลง table1 อยู่ที่ เครื่องตัวแม่
ส่วนtable 2 (เป็นตัวเดียวกันกับ table 1) แต่นำมาจากuser ใช่ไหมครับ?
ถ้าใช่ คำถามต่อไป
มี user หลายคนใช่หรือไม่ แล้วจะรู้ได้อย่างไรว่าจะ update s1 จาก user ใด?
แล้วใช้ key อะไรเป็นตัวบอกว่าจะ update record ใด ?
t2 เดี่ยวๆ ไม่ unique พอครับ แล้ว t2+t3 เป็น key ได้ไหม?
โชคดีปีใหม่ทุกคนนะครับ (ไปเที่ยวแย้ว)
ตกลง table1 อยู่ที่ เครื่องตัวแม่
ส่วนtable 2 (เป็นตัวเดียวกันกับ table 1) แต่นำมาจากuser ใช่ไหมครับ?
ถ้าใช่ คำถามต่อไป
มี user หลายคนใช่หรือไม่ แล้วจะรู้ได้อย่างไรว่าจะ update s1 จาก user ใด?
แล้วใช้ key อะไรเป็นตัวบอกว่าจะ update record ใด ?
t2 เดี่ยวๆ ไม่ unique พอครับ แล้ว t2+t3 เป็น key ได้ไหม?
โชคดีปีใหม่ทุกคนนะครับ (ไปเที่ยวแย้ว)
9 @R01212
กลับมาแล้วครับ ไปเที่ยวที่วังน้ำเขียวที่ โคราชมา เทศกาลดอกเบญจมาศบาน
รถติดมากๆๆๆๆๆระยะทางแค่ 10 กิโลเมตรใช้เวลาไปกลับอยู่ที่นั่น เกือบๆวัน
เซ็งเลย ไปอยู่ที่นั่น 2 วัน ไม่ได้ไปใหนเลยยุ่งแต่กับรถติด รถชนกันตลอดเวลาเลย กลับมาเรื่องคำถามครับ อย่างที่คุณ Arsitkpnplus พูดมานี่แหละครับ คือ
ปัญหาของผมเลย ตอนแรกออกแบบไว้ใช้เครื่องเดียว แต่ user เอาไปใช้หลายๆ
เครื่อง ข้อมูลมันเป็นแบบสอบถามนะครับ เพราะฉะนั้น user ก็หวังดีต่อกันโดยการเอาข้อมูลมาช่วยแบ่งกันพิมพ์ลงไปอีก ดังนั้น s1 หรือ s1 ผมจึงไม่รู้ว่าจะ
มาจาก table1 หรือ table2 ครั้นจะมาทำใหม่ user ก็พิมพ์ข้อมูลเข้าไปเกือบหมดแล้ว เป็น 10000 คน คนนึงก็ประมาณ 20 ข้อมูลครับ ขนาดผมย้ายไปใส่ใน excel เปิดขึ้นมาถึงกับ hang ไปเลยบางเครื่องที่ ram น้อยๆ แต่ตอนนี้ คงต้อง
หันไปหาวิธีแบบ semi automatic แล้วล่ะครับ ขอบคุณทุกๆท่านที่ช่วยเหลือนะครับ ว่างๆจะมาแจมอีกเรื่อยๆนะครับ ชอบครับ บอร์ดนี้ หามานานตั้งแต่เว็ปของ
อ.สุภาพไม่มี ผมคิดว่าจะไม่มีบอร์ดแนวๆนี้อีกแล้ว ให้กำลังใจครับ
รถติดมากๆๆๆๆๆระยะทางแค่ 10 กิโลเมตรใช้เวลาไปกลับอยู่ที่นั่น เกือบๆวัน
เซ็งเลย ไปอยู่ที่นั่น 2 วัน ไม่ได้ไปใหนเลยยุ่งแต่กับรถติด รถชนกันตลอดเวลาเลย กลับมาเรื่องคำถามครับ อย่างที่คุณ Arsitkpnplus พูดมานี่แหละครับ คือ
ปัญหาของผมเลย ตอนแรกออกแบบไว้ใช้เครื่องเดียว แต่ user เอาไปใช้หลายๆ
เครื่อง ข้อมูลมันเป็นแบบสอบถามนะครับ เพราะฉะนั้น user ก็หวังดีต่อกันโดยการเอาข้อมูลมาช่วยแบ่งกันพิมพ์ลงไปอีก ดังนั้น s1 หรือ s1 ผมจึงไม่รู้ว่าจะ
มาจาก table1 หรือ table2 ครั้นจะมาทำใหม่ user ก็พิมพ์ข้อมูลเข้าไปเกือบหมดแล้ว เป็น 10000 คน คนนึงก็ประมาณ 20 ข้อมูลครับ ขนาดผมย้ายไปใส่ใน excel เปิดขึ้นมาถึงกับ hang ไปเลยบางเครื่องที่ ram น้อยๆ แต่ตอนนี้ คงต้อง
หันไปหาวิธีแบบ semi automatic แล้วล่ะครับ ขอบคุณทุกๆท่านที่ช่วยเหลือนะครับ ว่างๆจะมาแจมอีกเรื่อยๆนะครับ ชอบครับ บอร์ดนี้ หามานานตั้งแต่เว็ปของ
อ.สุภาพไม่มี ผมคิดว่าจะไม่มีบอร์ดแนวๆนี้อีกแล้ว ให้กำลังใจครับ
Time: 0.3552s