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

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

เมื่อต้องการค้นหาตารางที่มี ทั้งสองคอลัมน์ที่ระบุ (เช่น Id และ Name) พร้อมกัน ให้สืบค้นจาก information_schema.columns กรองด้วย IN() แล้ว GROUP BY table_name HAVING COUNT(*) = 2 (หรือจำนวนคอลัมน์ที่ต้องการ)

คำสั่งค้นหาตารางที่มีคอลัมน์ Id และ Name ทั้งคู่

mysql> select table_name as TableNameFromWebDatabase
    -> from information_schema.columns
    -> where column_name IN ('Id', 'Name')
    -> group by table_name
    -> having count(*) = 2;

หมายเหตุ: ตัวอย่างเดิมใช้ HAVING COUNT(*) = 3 ซึ่งอาจผิด (ควรเป็น 2 สำหรับ 2 คอลัมน์) ผลลัพธ์อาจรวมตารางที่มีคอลัมน์ซ้ำหรือคอลัมน์เพิ่มเติม

ผลลัพธ์ตัวอย่าง

+--------------------------+
| TableNameFromWebDatabase |
+--------------------------+
| student                  |
| distinctdemo             |
| secondtable              |
| groupconcatenatedemo     |
| indemo                   |
| ifnulldemo               |
| demotable211             |
| demotable212             |
| demotable223             |
| demotable233             |
| demotable251             |
| demotable255             |
+--------------------------+

ตรวจสอบโครงสร้างตารางหนึ่ง (demotable233)

mysql> desc demotable233;
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| Id    | int(11)     | NO   | PRI | NULL    | auto_increment |
| Name  | varchar(20) | YES  |     | NULL    |                |
+-------+-------------+------+-----+---------+----------------+

คำอธิบาย:

  • information_schema.columns เก็บข้อมูลเมตาของคอลัมน์ทุกตาราง
  • WHERE column_name IN ('Id','Name') กรองเฉพาะคอลัมน์ที่ต้องการ
  • GROUP BY table_name จัดกลุ่มตามตาราง
  • HAVING COUNT(*) = 2 ต้องมีทั้ง 2 คอลัมน์ (นับ distinct column_name ดีกว่า)
  • วิธีแม่นยำกว่า: HAVING COUNT(DISTINCT column_name) = 2