ลบข้อมูลออกจาก Query
กระทู้เก่าบอร์ด อ.Yeadram

 1,757   2
URL.หัวข้อ / URL
ลบข้อมูลออกจาก Query

เรียนท่านอาจารย์ทุกท่าน
******ขอเกิ่นก่อนครับ ผมมีฐานข้อมูลชายไทยลงบัญชีทหารแล้ว 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

1 @R21089
ถ้าตารางคุณไม่ติดปัญหาเรื่อง Relationships แนะนำให้สร้างตารางใหม่เลย โดยทำตามภาพนี้ครับ



ก็จะได้ตารางใหม่ที่มีข้อมูลไม่ซ้ำกัน

แต่หากเป็นตารางที่มีการทำ 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;
------------------------------------------------------------------

ประมาณนี้ครับปรับใช้ดู

ปล. สำรองข้อมูลก่อนทดสอบนะครับ


2 @R21093
ขอบคุณท่าน TTT ที่ให้ความรู้
เรียนถาม หากเราจะเรียกใช้ delete query เราจะเขียนคำสั่งอย่างไร ผ่านปุ่ม command บน ฟอร์ม
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.2515s