一些SQL Server允许使用通用语句,例如ORDER BY PRIMARY KEY
。我认为这不适用于MySQL,是否有任何这样的解决方法可以跨多个表进行自动选择,还是需要使用查询查询来确定主键?
我一直在解决的方法是在运行查询之前调用SHOW COLUMNS FROM
。有更有效的方法吗?在选择过程中,MySQL可以确定表的主键吗?
更新:正如Gordon所指出的那样,在MySQL或SQL中一般没有官方的方法。 SAP具有自定义功能。有一些解决方法,例如使用John指出的SHOW COLUMNS FROM table
或information_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 |
+--------------------------------------------+