ตัวนี้จะต่างจาก SQL Server: หาตารางว่ามี PK, FK, UQ ตรงที่จะบอกว่าตารางนั้น ๆ มี column อะไรบ้างที่ทำหน้าที่ PK (Primary Key), FK (Foreign Key), UQ (Unique Constraint) และชื่อ columns อะไรบ้าง
find_from_table_has_PK_FK_UQ_columns.sql
SELECT
T.TABLE_SCHEMA,
T.TABLE_NAME,
T.CONSTRAINT_NAME,
T.CONSTRAINT_TYPE,
-- ใช้ STRING_AGG เพื่อรวมชื่อคอลัมน์ทั้งหมดเข้าด้วยกัน
STRING_AGG(C.COLUMN_NAME, ', ') WITHIN GROUP (ORDER BY C.COLUMN_NAME) AS Constraint_Columns
FROM
INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS T
INNER JOIN
INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE AS C
ON T.CONSTRAINT_NAME = C.CONSTRAINT_NAME
AND T.TABLE_SCHEMA = C.TABLE_SCHEMA
AND T.TABLE_NAME = C.TABLE_NAME
WHERE
T.CONSTRAINT_TYPE IN ('PRIMARY KEY', 'FOREIGN KEY', 'UNIQUE')
GROUP BY
T.TABLE_SCHEMA,
T.TABLE_NAME,
T.CONSTRAINT_NAME,
T.CONSTRAINT_TYPE
ORDER BY
T.TABLE_SCHEMA,
T.TABLE_NAME,
-- จัดเรียงตามประเภทคอนสเตรนท์: 1=PK, 2=UQ, 3=FK
CASE T.CONSTRAINT_TYPE
WHEN 'PRIMARY KEY' THEN 1
WHEN 'UNIQUE' THEN 2
WHEN 'FOREIGN KEY' THEN 3
ELSE 4 -- เผื่อไว้สำหรับประเภทอื่นๆ หากมีการเพิ่มใน WHERE clause
END,
T.CONSTRAINT_NAME;
อ่านเพิ่มเติม
About the author