选择查询时的Sql变量

时间:2013-10-04 10:42:48

标签: mysql

嘿,让我们说我们有3个表tbl1,tbl2,tbl3并使用下面的查询你可以查看数据

    select * from tbl1
    select * from tbl2
    select * from tbl3

我的问题是你可以通过使用变量来消除重复吗?例如

    DECLARE @x as varchar(60)
    set @x = tbl1
    set @x = tbl2
    set @x = tbl3
    select * from @x
    Go

我讨厌重新输入确切的查询是否有人知道一种方法使查询工作我认为它会节省我的时间。感谢

3 个答案:

答案 0 :(得分:1)

为什么不为此创建stored procedure

示例:

DELIMITER $$

DROP PROCEDURE IF EXISTS `selectAllTables`$$

CREATE PROCEDURE `selectAllTables`()
BEGIN
SELECT * from tbl1;
SELECT * from tbl2;
SELECT * from tbl3;
END$$

DELIMITER ;

用法:

CALL `selectAllTables`();

答案 1 :(得分:1)

如果您在MySQL中使用Dynamic SQL (SQL Server)类型的支持,则可以使用存储过程中的prepare语句来实现此目的

第一个create a stored procedure,带有一个参数,用于在字符串中获取表名:

DELIMITER ///

CREATE PROCEDURE SelectAllRecords(__TABLE__NAME varchar(255))
BEGIN
    SET @sql = CONCAT('SELECT * FROM ', __TABLE__NAME);

    PREPARE stmt FROM @sql;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;
END///

DELIMITER ;

接下来,您可以CALL在表名中发送存储过程:

call SelectAllRecords('table1')
call SelectAllRecords('table2')
call SelectAllRecords('table3')

答案 2 :(得分:0)

如果我的问题正确,那么下面的查询将适合您。

DECLARE @x as table
set @x = select * from tbl3
select * from @x
Go