ภาพรวม
ใช้ information_schema.columns ค้นหาตารางที่มี ทั้งสองคอลัมน์ ที่ระบุ (เช่น Id และ Name) ด้วย GROUP BY + HAVING COUNT(*) = 2
Query หลัก
SELECT table_name AS TableName
FROM information_schema.columns
WHERE column_name IN ('Id', 'Name')
AND table_schema = 'your_database_name' -- สำคัญ: ระบุ Database
GROUP BY table_name
HAVING COUNT(*) = 2;
ตัวอย่างผลลัพธ์
+--------------------------+
| TableName |
+--------------------------+
| student |
| distinctdemo |
| secondtable |
| groupconcatenatedemo |
| indemo |
| ifnulldemo |
| demotable211 |
| demotable212 |
| demotable233 |
| demotable251 |
| demotable255 |
+--------------------------+
การตรวจสอบยืนยัน (Verify)
DESC demotable233;
+-------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+----------------+
| Id | int(11) | NO | PRI | NULL | auto_increment |
| Name | varchar(20) | YES | | NULL | |
+-------+-------------+------+-----+---------+----------------+
รายละเอียด Query
WHERE column_name IN ('Id', 'Name')- กรองเฉพาะคอลัมน์ที่ต้องการAND table_schema = 'db_name'- สำคัญ จำกัดใน Database นั้นๆ (ไม่รวม system databases)GROUP BY table_name- จัดกลุ่มตามตารางHAVING COUNT(*) = 2- ต้องมีทั้งสองคอลัมน์ (Count = 2)
การประยุกต์ใช้
หาตารางที่มีคอลัมน์ 3 คอลัมน์ขึ้นไป
SELECT table_name
FROM information_schema.columns
WHERE column_name IN ('Id', 'Name', 'Email', 'Status')
AND table_schema = 'mydb'
GROUP BY table_name
HAVING COUNT(*) >= 3; -- มีอย่างน้อย 3 จาก 4 คอลัมน์
หาตารางที่มีคอลัมน์ชื่อใกล้เคียง (Pattern)
SELECT table_name, column_name
FROM information_schema.columns
WHERE column_name LIKE '%email%'
AND table_schema = 'mydb';
ดูรายละเอียดคอลัมน์ทั้งหมดของตาราง
SELECT column_name, data_type, column_key, is_nullable, column_default
FROM information_schema.columns
WHERE table_schema = 'mydb' AND table_name = 'demotable233';
ข้อควรระวัง
- ต้องระบุ
table_schemaมิฉะนั้นจะรวม System Databases (mysql, sys, information_schema, performance_schema) - Column Name Case-sensitive ขึ้นกับ OS/File System (Windows = Insensitive, Linux = Sensitive)
- ใช้
COUNT(DISTINCT column_name)หากอาจมีคอลัมน์ชื่อซ้ำในตารางเดียวกัน (นادرة)
สรุป
Query information_schema.columns ด้วย WHERE column_name IN (...) GROUP BY table_name HAVING COUNT(*) = N เพื่อหาตารางที่มีคอลัมน์ครบทุกตัวที่ต้องการ