【问题标题】:SET Table name in join query连接查询中的 SET 表名
【发布时间】:2019-08-07 04:46:05
【问题描述】:

是否可以在以下查询中设置表名:-

    SELECT t1.*, t2.* 
    from t1 
    inner join t2 
    on t1.id = t2.id 

假设 t1 和 t2 表的架构如下:-

   t1:-> id, field1, field2
   t2:-> id, field1, field2

我想要类似的东西:-

 t1_id, t1_field1, t1_field2, t2_id, t2_field1, t2_field2

【问题讨论】:

  • 选择列时可以使用列名Alias
  • 如果两个表中的列都很少,则别名是可行的,但我需要它用于每个表上的 20 列以上。
  • 那么你必须需要一些通用的解决方案来创建带有所有列名的选择查询
  • 您可以使用动态sql生成列名及其对应的别名。

标签: mysql sql database


【解决方案1】:

SQL 不会自动为您执行此操作。
您可以使用动态 sql 首先使用每个表的列名创建查询。稍后使用该查询来获取您的结果。

 SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS where 
 TABLE_NAME='YOUR_TABLE_NAME' into @colname;
 SET @table = 'YOUR_TABLE_NAME';
 SET @table_alias = 'T1';
 SET @query = CONCAT('SELECT ',@table_alias,'.',@colname,' AS ',@table_alias,'_',@colname,' FROM ', @table);

 PREPARE stmt FROM @query;
 EXECUTE stmt;

这不是您查询的确切解决方案,但它的变体可能会帮助您进行所需的查询。

【讨论】:

    【解决方案2】:

    您可以创建一个动态查询“此查询应该是您的 SELECT 语句,包含所有连接条件和 where 子句等......”

    最后执行它以获得结果....下面是您的问题的示例代码..

    声明@tblcols 表(ColPos int identity(1,1), queryColumn nvarchar(1000))

    插入@tblcols (queryColumn) SELECT (CONCAT('', table_name,'.', column_name, ' as ''', table_name, '__', column_name, ''' ')) FROM information_schema.columns WHERE table_name in('Table1','Table2' );

    声明@columnname nVarchar(MAX),@Join nVarchar(MAX);

    从@tblcols 中选择@columnname = COALESCE(@columnname + ', ' + queryColumn, queryColumn) ;

    选择@Join = 'FROM Table1 JOIN Table2 ON Table1.id = Table2.ID'

    选择@columnname = 'SELECT '+@columnname+' '+@Join

    --选择@列名

    执行(@columnname)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-26
      • 1970-01-01
      • 1970-01-01
      • 2011-04-27
      相关资源
      最近更新 更多