Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.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 如何获取列的值作为内部联接的表名?_Mysql_Sql_Inner Join - Fatal编程技术网

Mysql 如何获取列的值作为内部联接的表名?

Mysql 如何获取列的值作为内部联接的表名?,mysql,sql,inner-join,Mysql,Sql,Inner Join,我们如何引用一个表中的列值作为联接的引用(参见下面的示例) 我曾考虑过使用information_模式,但仅仅通过维护对要连接到当前连接结果的表的引用来完成一些可能更容易的事情太多了,只是我不知道如何使它们以这种方式连接。请帮助:( 编辑: 本质上,我们想要的是连接table1、table2和table3,只是table3的名称是存储在table2中的值 本例中的公共列是module_id(object_id) 未知的表是t2.nextOfKinTable 试试这个 declare @tabN

我们如何引用一个表中的列值作为联接的引用(参见下面的示例)

我曾考虑过使用information_模式,但仅仅通过维护对要连接到当前连接结果的表的引用来完成一些可能更容易的事情太多了,只是我不知道如何使它们以这种方式连接。请帮助:(

编辑:

  • 本质上,我们想要的是连接table1、table2和table3,只是table3的名称是存储在table2中的值
  • 本例中的公共列是module_id(object_id)
  • 未知的表是t2.nextOfKinTable
  • 试试这个

     declare @tabName varchar(1000)
     set @tabName = (select top 1 ProductName as tabName from products)
    
     declare @query varchar(8000)
     set @query = ' select
     p.ProductName as '''+@tabName+''' 
     from Products p'
    
    ---print(@query)
     exec (@query)
    

    在SQL中没有标准的方法。考虑如果你的代码> T2表包含1000行,并且每行都有一个明显的<代码> NExfOfKeTys< /Cord>值。这会导致查询变成1002个表连接。不漂亮。我甚至不知道在任何我知道的产品中支持它的任何专有语法。

    如果不同列值的数量较小,则可以使用左联接,但每个联接的表将接收不同的别名(例如使用3个表):


    您可能还想考虑这些单独的表是否应该是一个单独的表,用另外的列来区分行。这个问题有时被称为属性拆分。(参见Joe Celko在AN中的表分割示例)

    您好,我不完全理解您试图实现的目标。据我所知,您只能联接到另一个表o表变量。从您的查询中,我看不到哪个表分配了“t3”别名,您的第二次联接似乎引用了不同字段上的同一个表。您可以在第一次联接中用“and”检查两个字段现在我得到了一个问题。这实际上是一个很好的解决方案,只需在查询中添加一个连接并连接表名的变量。你是说如果我使用concat,我可以在查询中使用它的结果作为表名吗?哦,我明白你的意思。让我试试。非常好的答案和参考文章。我是ch现在就把Joe Celko的文章删掉。谢谢你们,我会让你们知道我在这件事上的发现。顺便说一句,我尝试设置的原因是用户希望有多少不同的模块类型(普通html模块、菜单模块、横幅模块等)由于它们都共享公共模块字段,我认为将公共字段(大约20个)放在它们都引用的单独表格中是有意义的。不?我也明白你的意思,关于1000个结果,但对于模块,这些结果永远不会超过100个。sql易读性很好!疯了!再次感谢:)
     declare @tabName varchar(1000)
     set @tabName = (select top 1 ProductName as tabName from products)
    
     declare @query varchar(8000)
     set @query = ' select
     p.ProductName as '''+@tabName+''' 
     from Products p'
    
    ---print(@query)
     exec (@query)
    
    SELECT
       t1.*, --TODO: List columns
       t2.*, --TODO: List columns
       COALESCE(t3.ColumnA,t4.ColumnA,t5.ColumnA) as ColumnA,
       COALESCE(t3.ColumnB,t4.ColumnB,t5.ColumnB) as ColumnB
    FROM
        term_relationships as t1 
            INNER JOIN
        modules as t2
            ON
               t2.module_id = t1.object_id
            LEFT JOIN
        Table3 as t3
            ON
               t3.module_id = t2.module_id AND
               t2.nextOfKinTable = 'Table3'
            LEFT JOIN
        Table4 as t4
            ON
               t4.module_id = t2.module_id AND
               t2.nextOfKinTable = 'Table4'
            LEFT JOIN
        Table5 as t5
            ON
               t5.module_id = t2.module_id AND
               t2.nextOfKinTable = 'Table5'