คำอธิบาย
ใช้ Subquery ใน SELECT clause นับ COUNT(*) จากแต่ละตาราง แล้ว SELECT จาก DUAL (Dummy table) เพื่อให้ได้ 1 แถวเดียว
ขั้นตอนการสร้างตารางและข้อมูลตัวอย่าง
ตารางที่ 1: DemoTable1
mysql> create table DemoTable1 ( Name varchar(40) ); Query OK, 0 rows affected (0.81 sec)
mysql> insert into DemoTable1 values('Chris');
Query OK, 1 row affected (0.48 sec)
mysql> insert into DemoTable1 values('Robert');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable1 values('Mike');
Query OK, 1 row affected (0.10 sec)
ตารางที่ 2: DemoTable2
mysql> create table DemoTable2 ( Score int ); Query OK, 0 rows affected (1.16 sec)
mysql> insert into DemoTable2 values(86); Query OK, 1 row affected (0.22 sec) mysql> insert into DemoTable2 values(98); Query OK, 1 row affected (0.08 sec) mysql> insert into DemoTable2 values(75); Query OK, 1 row affected (0.14 sec)
คิวรี่นับแถวจาก 2 ตารางพร้อมกัน
mysql> select
(select count(*) from DemoTable1) AS FirstTableCount,
(select count(*) from DemoTable2) AS SecondTableCount
from dual;
ผลลัพธ์
+-----------------+------------------+ | FirstTableCount | SecondTableCount | +-----------------+------------------+ | 3 | 3 | +-----------------+------------------+ 1 row in set (0.00 sec)
คำอธิบาย
- DUAL: ตาราง Dummy ใน MySQL (และ Oracle) ใช้เมื่อต้องการ SELECT ค่าคงที่หรือ Expression โดยไม่ต้อง FROM ตารางจริง
- Subquery แต่ละอันทำงานอิสระ คืนค่า Scalar (ค่าเดียว)
- Alias
FirstTableCount,SecondTableCountตั้งชื่อคอลัมน์ผลลัพธ์
วิธีอื่น: UNION ALL
SELECT 'DemoTable1' as TableName, COUNT(*) as RowCount FROM DemoTable1 UNION ALL SELECT 'DemoTable2', COUNT(*) FROM DemoTable2;
ผลลัพธ์เป็น 2 แถว (TableName, RowCount)
ประสิทธิภาพ
COUNT(*) บน InnoDB ต้อง Scan ทุกแถว (MVCC) หากต้องการนับเร็ว ให้เก็บจำนวนไว้ในตารางสรุป (Summary Table) หรือใช้ Trigger อัปเดต