กระทู้เก่าบอร์ด อ.Yeadram
1,878 2
URL.หัวข้อ /
URL
ลบข้อมูลออกจาก Query
เรียนท่านอาจารย์ทุกท่าน
******ขอเกิ่นก่อนครับ ผมมีฐานข้อมูลชายไทยลงบัญชีทหารแล้ว 6,000 คน ต่อจากนั้นท่าน อาจารย์ Ditasilk Kc ได้ออกแบบในการตัดฐานข้อมูล จะได้ชายได้มาอีก 20,000 คน รวม 26,000 คนเอาลงไปยังตารางหลักเรียบร้อยแล้ว
******ใน 20,000 คน มีคนลงบัญชีแล้ว 2,000 คน ซึ่งเป็นฐานข้อมูลที่ซ้ำกัน ผมได้ใช้ QUERY สามารถแยกเอาคนที่ซ้ำออกมาได้แล้ว
*****ผมต้องการลบข้อมูลออกจากตารางหลัก (ทั้งระเบียน)โดยผ่าน Query ที่แสดงชื่อ และ นามสกุล ผมใช้ Query Delete ไม่สามารถลบได้ หรืผมใช้วิธีไม่ถูกต้อง
*******
ผมจะต้องเขียนเงื่อนไขอย่างไร
******ขอเกิ่นก่อนครับ ผมมีฐานข้อมูลชายไทยลงบัญชีทหารแล้ว 6,000 คน ต่อจากนั้นท่าน อาจารย์ Ditasilk Kc ได้ออกแบบในการตัดฐานข้อมูล จะได้ชายได้มาอีก 20,000 คน รวม 26,000 คนเอาลงไปยังตารางหลักเรียบร้อยแล้ว
******ใน 20,000 คน มีคนลงบัญชีแล้ว 2,000 คน ซึ่งเป็นฐานข้อมูลที่ซ้ำกัน ผมได้ใช้ QUERY สามารถแยกเอาคนที่ซ้ำออกมาได้แล้ว
*****ผมต้องการลบข้อมูลออกจากตารางหลัก (ทั้งระเบียน)โดยผ่าน Query ที่แสดงชื่อ และ นามสกุล ผมใช้ Query Delete ไม่สามารถลบได้ หรืผมใช้วิธีไม่ถูกต้อง
*******
ผมจะต้องเขียนเงื่อนไขอย่างไร
2 Reply in this Topic. Dispaly 1 pages and you are on page number 1
2 @R21093
ขอบคุณท่าน TTT ที่ให้ความรู้
เรียนถาม หากเราจะเรียกใช้ delete query เราจะเขียนคำสั่งอย่างไร ผ่านปุ่ม command บน ฟอร์ม
เรียนถาม หากเราจะเรียกใช้ delete query เราจะเขียนคำสั่งอย่างไร ผ่านปุ่ม command บน ฟอร์ม
Time: 0.4752s
ก็จะได้ตารางใหม่ที่มีข้อมูลไม่ซ้ำกัน
แต่หากเป็นตารางที่มีการทำ Relationships กันยุ่งพอสมควรไม่สามารถใช้ตารางใหม่ได้ก็คงต้องใช้การลบ โดยยกตัวอย่างประมาณนี้ครับ
สมมุติมีตารางชื่อ Table1
----------Table1-----------
| ID | LastName | FirstName |
|----+---------------+---------------|
| 1 | Davolio. | Nancy |
| 2 | Fuller | Andrew |
| 3 | Leveling | Janet |
| 4 | Peacock | Margaret |
| 5 | Buchanan | Steven |
| 6 | Suyama | Michael |
| 7 | King | Robert |
| 8 | Callahan | Laura |
| 9 | Dodsworth| Anne |
| 10 | Peacock | Margaret |
| 11 | Callahan | Laura |
| 12 | Suyama | Peter |
-----------------------------------
- วิธีการก็คือการทำ Running Count แหละครับ เสร็จแล้วก็เอาค่าเรคคอร์ดที่มันมากกว่า 1 ลบออกให้หมด
- เขียนแบบเป็น SELECT ก่อน เพื่อดูว่าข้อมูลที่จะลบถูกต้องหรือไม่
------------------------------------------------------------------
SELECT Table1.*
FROM Table1
WHERE ((SELECT COUNT (*) FROM Table1 AS b
WHERE (b.LastName & b.FirstName = Table1.LastName & Table1.FirstName) AND (b.ID <= Table1.ID))>1);
------------------------------------------------------------------
- คิวรี่จะแสดงเรคคอร์ดที่ซ้ำกันมากกว่า 1 ออกมา ตรวจสอบว่าตรงตามต้องการหรือป่าว
- ถ้าถูกต้องก็เปลี่ยนจาก SELECT เป็น DELETE
------------------------------------------------------------------
DELETE Table1.*
FROM Table1
WHERE ((SELECT COUNT (*) FROM Table1 AS b
WHERE (b.LastName & b.FirstName = Table1.LastName & Table1.FirstName) AND (b.ID <= Table1.ID))>1);
------------------------------------------------------------------
- เซฟคิวรี่ แล้วปิด จากนั้นคลิ๊กๆคิวรี่นี้อีกครั้ง โปรแกรมก็จะทำการลบ หากข้อมูลมากๆ อาจต้องรอนานหลายนาทีกว่าจะเสร็จ
- หรืออาจเขียนโดยใช้ DCount() อย่างนี้จะเร็วขึ้นอีกประมาณนึง
------------------------------------------------------------------
DELETE *
FROM Table1
WHERE DCount("1", "Table1", "[LastName] & [FirstName] = '" & Table1.LastName & Table1.FirstName & "' AND [ID] <= " & Table1.ID)>1;
------------------------------------------------------------------
ประมาณนี้ครับปรับใช้ดู
ปล. สำรองข้อมูลก่อนทดสอบนะครับ