2016-04-13 309 views
0

所有列名称我有选择的所有列名的MySql的select查询:选择从MySQL数据库

SELECT info.COLUMN_NAME AS `NAME`, info.TABLE_SCHEMA AS `TABLESCHEMA`, 
    info.TABLE_NAME AS `TABLENAME`, info.ORDINAL_POSITION AS `POSITION`, 
    info.IS_NULLABLE AS `ISNULLABLE`, info.DATA_TYPE AS `DATATYPE`, 
    tc.CONSTRAINT_TYPE AS `CONSTRAINTTYPE`, 
    kcufk.TABLE_SCHEMA AS `REFRENCESCHEMA`, 
    kcufk.TABLE_NAME AS `REFRENCETABLE`, 
    kcufk.COLUMN_NAME AS `REFRENCECOLUMN` FROM 
    INFORMATION_SCHEMA.`COLUMNS` info LEFT OUTER JOIN INFORMATION_SCHEMA.`KEY_COLUMN_USAGE` kcu 
    ON kcu.COLUMN_NAME = info.COLUMN_NAME AND kcu.TABLE_NAME = info.TABLE_NAME LEFT OUTER JOIN 
    INFORMATION_SCHEMA.`TABLE_CONSTRAINTS` tc ON tc.CONSTRAINT_NAME = kcu.CONSTRAINT_NAME 
    AND tc.TABLE_NAME = kcu.TABLE_NAME LEFT OUTER JOIN INFORMATION_SCHEMA.`REFERENTIAL_CONSTRAINTS` 
    rk ON rk.CONSTRAINT_NAME = tc.CONSTRAINT_NAME LEFT OUTER JOIN INFORMATION_SCHEMA.`KEY_COLUMN_USAGE` 
    kcufk ON kcufk.CONSTRAINT_NAME = rk.UNIQUE_CONSTRAINT_NAME WHERE info.TABLE_NAME = 'reportsetting' AND 
    info.TABLE_SCHEMA = 'core' ORDER BY info.ORDINAL_POSITION ASC 

的问题是在执行这个查询,外键来了多次。

What am I doing wrong in this query?

回答

1

更新,其中加入的条件查询,这应该给你找什么

 
    SELECT info.COLUMN_NAME AS `NAME`, info.TABLE_SCHEMA AS `TABLESCHEMA`, 
    info.TABLE_NAME AS `TABLENAME`, info.ORDINAL_POSITION AS `POSITION`, 
    info.IS_NULLABLE AS `ISNULLABLE`, info.DATA_TYPE AS `DATATYPE`, 
    tc.CONSTRAINT_TYPE AS `CONSTRAINTTYPE`, 
    kcufk.TABLE_SCHEMA AS `REFRENCESCHEMA`, 
    kcufk.TABLE_NAME AS `REFRENCETABLE`, 
    kcufk.COLUMN_NAME AS `REFRENCECOLUMN` 

    FROM INFORMATION_SCHEMA.`COLUMNS` info 
    JOIN INFORMATION_SCHEMA.`KEY_COLUMN_USAGE` kcu 
     ON kcu.COLUMN_NAME = info.COLUMN_NAME 
     AND kcu.TABLE_NAME = info.TABLE_NAME 

    JOIN INFORMATION_SCHEMA.`TABLE_CONSTRAINTS` tc 
     ON tc.CONSTRAINT_NAME = kcu.CONSTRAINT_NAME 
     AND tc.TABLE_NAME = kcu.TABLE_NAME 

    JOIN INFORMATION_SCHEMA.`REFERENTIAL_CONSTRAINTS` rk 
     ON rk.CONSTRAINT_NAME = tc.CONSTRAINT_NAME 
     AND rk.TABLE_NAME = kcu.TABLE_NAME 

    JOIN INFORMATION_SCHEMA.`KEY_COLUMN_USAGE` kcufk 
     ON kcufk.CONSTRAINT_NAME = rk.UNIQUE_CONSTRAINT_NAME 
     AND kcufk.TABLE_NAME = rk.TABLE_NAME 

    WHERE info.TABLE_NAME = 'reportsetting' 
     AND info.TABLE_SCHEMA = 'core' 
    ORDER BY info.ORDINAL_POSITION ASC 
+0

: - 在执行这个查询O/P来一次,但其REFRENCETABLE没有显示正确。它显示相同的表名,即报告设置 – Sanjiv

+0

: - 即使'REFRENCECOLUMN'也不能正确显示。它显示相同的表引用列名 – Sanjiv

+0

我得到了解决方案..其实我选择table_name而不是reference_table_name。 – Sanjiv