gpt4 book ai didi

mysql - 使用 select 中的字符串选择 mysql 中的特定列

转载 作者:行者123 更新时间:2023-11-29 17:51:53 24 4
gpt4 key购买 nike

我正在尝试根据从另一个选择中获得的字符串来选择列:

SELECT id, (
SELECT COLUMN_NAME
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = 'database_name'
AND TABLE_NAME = 'a'
AND DATA_TYPE = 'varchar'
ORDER BY `COLUMNS`.`ORDINAL_POSITION` ASC LIMIT 1) AS `name`
FROM `a`

问题是这样的,我只从子选择中获取字符串,而不是主查询的列内容。

(在这种情况下我想要做的是返回第一列 varchar 的值)

最佳答案

您可以使用在存储过程中构造的动态查询来执行此操作,然后使用适当的参数调用该存储过程。

如果我能找到一种查询 information_schema 的方法,我会将示例放入 sqlfiddle 中,但您只需将其复制/粘贴到普通客户端中即可,它应该可以工作。

我比您的示例更进一步,允许您从任何表中选择 id 和第一个 varchar 列,但如果您需要的话,您可以轻松调整过程并对数据库和表名称进行硬编码。

CREATE DATABASE IF NOT EXISTS `mydb`;
USE `mydb`;

CREATE TABLE IF NOT EXISTS `mydb`.`tableA` (
id INT auto_increment primary key,
char_col char(3),
varchar_col varchar(25)
);

-- clear out any existing records
TRUNCATE `mydb`.`tableA`;

INSERT INTO `mydb`.`tableA` VALUES (null,'abc','varchar value abc');
INSERT INTO `mydb`.`tableA` VALUES (null,'def','varchar value def');
INSERT INTO `mydb`.`tableA` VALUES (null,'ghi','varchar value ghi');
INSERT INTO `mydb`.`tableA` VALUES (null,'klm','varchar value klm');

DELIMITER //

DROP PROCEDURE IF EXISTS `mydb`.`dyntest` //
CREATE PROCEDURE `mydb`.`dyntest` (IN dbname VARCHAR(64), IN tname VARCHAR(64))
BEGIN
DECLARE colname VARCHAR(64);

-- get the column name (as your example)
SELECT `COLUMN_NAME` INTO colname
FROM `information_schema`.`COLUMNS`
WHERE `TABLE_SCHEMA` = dbname
AND `TABLE_NAME` = tname
AND `DATA_TYPE` = 'VARCHAR'
ORDER BY `COLUMNS`.`ORDINAL_POSITION` ASC LIMIT 1;

-- construct the query
SET @sqlquery = CONCAT('SELECT `id`,`', colname , '` FROM `' , dbname, '`.`', tname, '`');

-- Prepare and execute
PREPARE stmt FROM @sqlquery;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

END //

DELIMITER ;

这会返回

mysql>  CALL `mydb`.`dyntest`('mydb','tableA'); 
+----+-------------------+
| id | varchar_col |
+----+-------------------+
| 1 | varchar value abc |
| 2 | varchar value def |
| 3 | varchar value ghi |
| 4 | varchar value klm |
+----+-------------------+
4 rows in set (0.06 sec)

关于mysql - 使用 select 中的字符串选择 mysql 中的特定列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49251670/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com