Subqueries ใน MySQL และ PostgreSQL
กระทู้เก่าบอร์ด อ.สุภาพ ไชยา

 301   1
URL.หัวข้อ / URL
Subqueries ใน MySQL และ PostgreSQL

ที่ผมชอบ PostgreSQL กว่า MySQL จุดหนึ่งคือ Postgres สนับสนุน Subqueries
ซึ่งใน MySQL 4.0.13 สำหรับ Windows ยังไม่สนับสนุน feature นี้ครับ แต่จะมีในเวอร์ชัน 4.1

ผมขอยกตัวอย่างการใช้ Subqueries แบบง่ายๆ ให้ดูครับ
เงื่อนไข ค้นหากระทู้ในเว็บบอร์ดนี้ว่ามีคำถามไหนบ้างที่ยังไม่มีคนตอบ

PostgreSQL

mydb=# select qnumber from question where qnumber not in (select distinct qnumber from answer);

จะเห็นว่าผมใช้ Distinct ช่วยในการแสดงเฉพาะคำตอบที่ไม่ซ้ำกัน
ซึ่งจะทำงานเร็วกว่าการไม่ใช้ Distinct แบบข้างล่างนี้ครับ

mydb=# select qnumber from question where qnumber not in (select qnumber from answer);

ส่วน MySQL ก็ทำได้ครับ แต่ต้องใช้ Left Join ช่วยเอา แต่ผมสังเกตุว่าจะทำงานช้ากว่า PostgreSQL นะครับ

mysql> select question.qnumber from question left join answer on question.qnumber=answer.qnumber where answer.qnumber is null;

319 rows in set (58.27 sec)

ลองศึกษาการแก้ไขปัญหา Subqueries ของ MySQL เพิ่มเติมได้ที่
http://www.mysql.com/doc/en/ANSI_diff_Sub-selects.html

แล้วถ้ามีเวลาลองไปดูกระทู้ http://www.pantip.com/tech/developer/topic/DD1296347.html นี้ครับว่าจะประยุกต์ใช้อย่างไรได้บ้าง


และถ้าจะหาว่าคำถามไหนมีคนตอบแล้วบ้าง ให้ใช้อย่างนี้ครับ

Postgres:
mydb=# select qnumber from question where qnumber in (select distinct qnumber from answer);

=

MySQL:
mysql> select question.qnumber from question, answer where question.qnumber=answer.qnumber;


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

1 @R04091
ใน MS SQL Server จะใช้เหมือนกับ PostgreSQL

ถ้าดูที่ความเร็ว จะเห็นว่า MS SQL Server จะทำงานเร็วกว่าเพื่อนๆ รองลงมาคือ PostgreSQL ครับ


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