0

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

正確なクエリを再入力するのは嫌いです。クエリを機能させる方法を知っている人はいますか。時間を大幅に節約できると思います。ありがとう

4

3 に答える 3

1

MySQL での動的 SQL (SQL Server)タイプのサポートを意図している場合は、ストアド プロシージャの prepare ステートメントを使用してこれを実現できます。

最初に、テーブル名を文字列で取得するパラメータを持つストアド プロシージャを作成します。

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 SelectAllRecords('table1')
call SelectAllRecords('table2')
call SelectAllRecords('table3')
于 2013-10-04T11:45:55.703 に答える
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`();
于 2013-10-04T10:47:10.947 に答える
0

あなたの質問が正しければ、以下のクエリが機能します。

DECLARE @x as table
set @x = select * from tbl3
select * from @x
Go
于 2013-10-04T10:47:19.413 に答える