从名称是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示例略有不同。看见