一些SQL Server允许使用通用语句,例如ORDER BY PRIMARY KEY。我认为这不适用于MySQL,是否有任何这样的解决方法可以跨多个表进行自动选择,还是需要使用查询查询来确定主键?

我一直在解决的方法是在运行查询之前调用SHOW COLUMNS FROM。有更有效的方法吗?在选择过程中,MySQL可以确定表的主键吗?

更新:正如Gordon所指出的那样,在MySQL或SQL中一般没有官方的方法。 SAP具有自定义功能。有一些解决方法,例如使用John指出的SHOW COLUMNS FROM tableinformation_schema

最佳答案

MySQL通常按插入顺序(主要按主键)提取数据,但从技术上讲,如果您取出主键列名并按以下顺序排列,则您可以做同样的事情

SELECT whatever FROM table
ORDER BY
(   SELECT `COLUMN_NAME`
    FROM `information_schema`.`COLUMNS`
    WHERE (`TABLE_SCHEMA` = 'dbName')
      AND (`TABLE_NAME` = 'tableName')
      AND (`COLUMN_KEY` = 'PRI')
);

对于复合键,您可以使用此
SELECT whatever FROM table
ORDER BY
(   SELECT GROUP_CONCAT(`COLUMN_NAME` SEPARATOR ', ')
    FROM `information_schema`.`COLUMNS`
    WHERE (`TABLE_SCHEMA` = 'dbName')
      AND (`TABLE_NAME` = 'tableName')
      AND (`COLUMN_KEY` = 'PRI')
);

来自DOCS的信息模式访问权限



设置:
CREATE TABLE some_stuff (
    firstID INT,
    secondID INT,
    username varchar(55),
    PRIMARY KEY (firstID, secondID)
) ;

询问:
SELECT GROUP_CONCAT(`COLUMN_NAME` SEPARATOR ', ')
FROM `information_schema`.`COLUMNS`
WHERE (`TABLE_SCHEMA` = 'dbName')
  AND (`TABLE_NAME` = 'some_stuff')
  AND (`COLUMN_KEY` = 'PRI');

输出:
+--------------------------------------------+
| GROUP_CONCAT(`COLUMN_NAME` SEPARATOR ', ') |
+--------------------------------------------+
|              firstID, secondID             |
+--------------------------------------------+

10-06 07:41
查看更多