mysql查询 查询TABLE_NAME, column_name, data_type, COLUMN_TYPE, ORDINAL_POSITION, 先根据TABLE_NAME排序,再根据ORDINAL_POSITION排序,再根据TABLE_NAME分组取每组的第一条
时间: 2024-03-17 22:43:35 浏览: 101
可以使用以下 SQL 语句完成你的需求:
```
SELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE, COLUMN_TYPE, ORDINAL_POSITION
FROM (
SELECT *, ROW_NUMBER() OVER (PARTITION BY TABLE_NAME ORDER BY ORDINAL_POSITION) AS row_num
FROM information_schema.columns
ORDER BY TABLE_NAME, ORDINAL_POSITION
) t
WHERE t.row_num = 1
```
这个 SQL 语句使用了子查询和窗口函数来实现你的需求:
- 子查询:将 `information_schema.columns` 中的所有列按照 `TABLE_NAME` 和 `ORDINAL_POSITION` 排序,并为每个 `TABLE_NAME` 分配一个行号 `row_num`,然后将结果作为子查询。
- 窗口函数:使用 `ROW_NUMBER()` 窗口函数为每个 `TABLE_NAME` 分配行号,让子查询中的 `row_num` 列成为可用的列。
最后,将子查询的结果作为 `t` 表,并在外部查询中过滤出每个 `TABLE_NAME` 的第一行,即 `t.row_num = 1`。
相关问题
mysql查询两表中除了某一字段外的字段
你可以使用字段排除的功能来查询两个表中除了某一字段外的字段。在MySQL中,你可以使用以下方法来实现:
1. 使用字段排除功能:
```
SELECT column1, column2, ... FROM table_name WHERE column_name <> '你不想要的字段名';
```
例如,如果你想要查询除了content字段之外的所有字段,可以使用以下语句:
```
SELECT column1, column2, ... FROM table_name WHERE column_name <> 'content';
```
2. 使用information_schema表查询:
```
SELECT GROUP_CONCAT(column_name SEPARATOR ',') FROM information_schema.COLUMNS WHERE column_name <> '你不想要的字段名' AND table_name = '表名' GROUP BY table_name;
```
例如,如果你想要查询除了content字段之外的所有字段,可以使用以下语句:
```
SELECT GROUP_CONCAT(column_name SEPARATOR ',') FROM information_schema.COLUMNS WHERE column_name <> 'content' AND table_name = 'table_name' GROUP BY table_name;
```
3. 使用information_schema表查询多个字段:
```
SELECT DISTINCT TABLE_NAME AS '表名', COLUMN_NAME AS '列名', DATA_TYPE AS '数据类型', COLUMN_COMMENT AS '注释' FROM information_schema.`COLUMNS` WHERE TABLE_SCHEMA = '数据库名' AND (COLUMN_NAME LIKE "%字段1%" OR COLUMN_NAME LIKE "%字段2%" OR COLUMN_NAME = "字段3") ORDER BY TABLE_NAME, ORDINAL_POSITION;
```
例如,如果你想要查询带有phone、mobile字段和id_card字段的表中的所有字段,可以使用以下语句:
```
SELECT DISTINCT TABLE_NAME AS '表名', COLUMN_NAME AS '列名', DATA_TYPE AS '数据类型', COLUMN_COMMENT AS '注释' FROM information_schema.`COLUMNS` WHERE TABLE_SCHEMA = '数据库名' AND (COLUMN_NAME LIKE "%phone%" OR COLUMN_NAME LIKE "%mobile%" OR COLUMN_NAME = "id_card") ORDER BY TABLE_NAME, ORDINAL_POSITION;
```
请注意,以上方法中的"表名"、"数据库名"、"字段名"等需要根据你的实际情况进行替换。
#### 引用[.reference_title]
- *1* *2* [243 mysql获取某个表中除了某个字段名外的所有字段名](https://blog.csdn.net/phpstory/article/details/111605015)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item]
- *3* [如何在mysql中查询所有表中的指定字段](https://blog.csdn.net/im_roy/article/details/123104355)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
mysql查询表中的所有列名,和相应的数据类型。
在MySQL数据库中,你可以使用`information_schema`数据库来查询某个表的所有列名以及相应的数据类型。具体步骤如下:
1. 首先确定你想要查询的数据库名称,假设为`your_database_name`。
2. 确定你想要查询的表名称,假设为`your_table_name`。
3. 使用以下的SQL查询语句来获取表的列信息:
```sql
SELECT
TABLE_NAME,
COLUMN_NAME,
COLUMN_DEFAULT,
IS_NULLABLE,
DATA_TYPE,
CHARACTER_MAXIMUM_LENGTH,
NUMERIC_PRECISION,
NUMERIC_SCALE
FROM
information_schema.COLUMNS
WHERE
TABLE_SCHEMA = 'your_database_name' AND
TABLE_NAME = 'your_table_name'
ORDER BY
ORDINAL_POSITION;
```
这段SQL代码会返回`your_table_name`表的所有列名(`COLUMN_NAME`),数据类型(`DATA_TYPE`),以及其他一些列属性如默认值(`COLUMN_DEFAULT`),是否允许为NULL(`IS_NULLABLE`),字符最大长度(`CHARACTER_MAXIMUM_LENGTH`),数字精度(`NUMERIC_PRECISION`)和小数位数(`NUMERIC_SCALE`)。
阅读全文