Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

ค้นหาตารางที่มีคอลัมน์ 2 คอลัมน์เฉพาะเจาะจงใน MySQL ด้วย information_schema.columns

ภาพรวม

ใช้ 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

  1. WHERE column_name IN ('Id', 'Name') - กรองเฉพาะคอลัมน์ที่ต้องการ
  2. AND table_schema = 'db_name' - สำคัญ จำกัดใน Database นั้นๆ (ไม่รวม system databases)
  3. GROUP BY table_name - จัดกลุ่มตามตาราง
  4. 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 เพื่อหาตารางที่มีคอลัมน์ครบทุกตัวที่ต้องการ