Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从名称是MySQL中另一个select结果的列中进行选择_Mysql - Fatal编程技术网

从名称是MySQL中另一个select结果的列中进行选择

从名称是MySQL中另一个select结果的列中进行选择,mysql,Mysql,有可能在一份声明中做到这一点吗? 如果我有 tab1 tab2 A B -- and -- 1 A 是否可以执行类似于从tab1的tab2中选择B并获取“1”这样的操作。我尝试了这个,但它只返回了“A”。您可能需要先执行内部查询。然后在外部查询中使用结果。那就行了。请确保正确使用引号字符。您可能必须先执行内部查询。然后在外部查询中使用结果。那就行了。请确保正确使用引号字符 DECLARE holdv

有可能在一份声明中做到这一点吗? 如果我有

tab1           tab2
A              B
--     and     --
1              A

是否可以执行类似于从tab1的tab2中选择B并获取“1”这样的操作。我尝试了这个,但它只返回了“A”。

您可能需要先执行内部查询。然后在外部查询中使用结果。那就行了。请确保正确使用引号字符。

您可能必须先执行内部查询。然后在外部查询中使用结果。那就行了。请确保正确使用引号字符

DECLARE
    holdvalue table2.B%TYPE;
    stmt VARCHAR(200);
    record VARCHAR(200);
BEGIN
    select B into holdvalue from table2;
    stmt :='SELECT ' || holdvalue || ' from table1';
    DBMS_OUTPUT.PUT_LINE('Query: ' || stmt);
    EXECUTE IMMEDIATE stmt INTO record;
    DBMS_OUTPUT.PUT_LINE('Record: ' || record); 
END
这就是PL/SQL解决方案

然而,对于没有PL/SQL的mysql,我认为我们不能

这就是PL/SQL解决方案


然而,对于没有PL/SQL的mysql,我认为我们不能。

我认为使用动态SQL的过程应该可以工作:

DELIMITER //    

CREATE PROCEDURE a_procedure()
BEGIN 
    SELECT A FROM tab2 INTO @col;

    SET @query = CONCAT('SELECT ', @col, ' FROM tab1');
    PREPARE getValue FROM @query;
    EXECUTE getValue;
    DEALLOCATE PREPARE getValue;
END//

DELIMITER ;

我认为这个使用动态SQL的过程应该可以工作:

DELIMITER //    

CREATE PROCEDURE a_procedure()
BEGIN 
    SELECT A FROM tab2 INTO @col;

    SET @query = CONCAT('SELECT ', @col, ' FROM tab1');
    PREPARE getValue FROM @query;
    EXECUTE getValue;
    DEALLOCATE PREPARE getValue;
END//

DELIMITER ;

我认为您需要使用过程和动态SQL。我认为您需要使用过程和动态SQL。MySQL确实支持存储过程中的动态SQL准备/执行语句,但语法与您展示的Oracle示例略有不同。请看,MySQL确实支持存储过程中的动态SQL准备/执行语句,但语法与您展示的Oracle示例略有不同。看见