Mysql 使用表中的数据作为列标题

Mysql 使用表中的数据作为列标题,mysql,sql,Mysql,Sql,我有一个包含两个表的数据库,即component_psar和tbl_info。组件psar表具有字段“tbl\U id”,该字段引用tbl\U信息中相应的“id”字段 我需要编写一个查询,其中数据取自tbl_info,并用作组件psar中该列的标题 因此,如果component_psar表包含数据: tbl_id | col_1 1 | Hello 1 | Hi 1 | What's up? 然后是tbl_信息表: id | heading 1 | Gree

我有一个包含两个表的数据库,即component_psar和tbl_info。组件psar表具有字段“tbl\U id”,该字段引用tbl\U信息中相应的“id”字段

我需要编写一个查询,其中数据取自tbl_info,并用作组件psar中该列的标题

因此,如果component_psar表包含数据:

tbl_id | col_1 1 | Hello 1 | Hi 1 | What's up? 然后是tbl_信息表:

id | heading 1 | Greetings 我希望它显示为:

Greetings Hello Hi What's up? 我编写了以下SQL查询以尝试实现这一点:

选择component_psar.col_1作为从tbl_info中选择tbl_info.heading,从tbl_info中选择component_psar,其中tbl_info.id='1',从tbl_info中选择component_psar,其中component_psar.tbl_id='1'

但这只是抛出了一个语法错误:

1064-您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,了解在第1行的“从tbl_信息中选择tbl_info.heading,component_psar,其中tbl_info.id=compo”附近使用的正确语法

有没有人能给我一些建议,告诉我如何做到这一点?看着其他问题,我开始阅读pivot表,但我还没有看到这对我的目的有任何作用。也许我误解了


在此方面的任何帮助都将不胜感激。

在MS SQL中,可以通过以下方式实现:

    declare @sql nvarchar(max)
declare @col_name varchar(100)
select @col_name = heading from tbl_info where heading = 'greetings'
set @sql = 'select col_1 as ' + quotename(@col_name) + ' from component_psar'
exec(@sql)

但是,此解决方案是一个代码片段,而不是一个查询。

在MS SQL中,可以通过以下方式实现:

    declare @sql nvarchar(max)
declare @col_name varchar(100)
select @col_name = heading from tbl_info where heading = 'greetings'
set @sql = 'select col_1 as ' + quotename(@col_name) + ' from component_psar'
exec(@sql)

但是,此解决方案是一个代码片段,而不是一个查询。

我会尝试将从数据库检索数据并格式化以供显示的过程分离出来

一个简单的内部联接应该适用于您的查询

select tbl_info.heading as Heading,component_psar.col_1 as Value 
from tbl_info 
inner join component_psar on component_psar.tbl_id = tbl_info.id
order by tbl_info.heading
这将为您提供以下查询结果

Heading   | Value 
----------+--------------
Greetings |  Hello
Greetings |  Hi
Greetings |  What's up?
如何处理此显示取决于您的编程环境

如果您只是在屏幕上打印,下面的伪代码将显示如何仅在标题更改时打印标题

current_heading = ""
for each row in results
    if row.heading not equal to current_heading   
        current_heading  = row.heading
        print blank line 
        print current_heading 
    end if
    print row.value
loop

我会尝试将从数据库中检索数据并将其格式化以供显示的过程分离出来

一个简单的内部联接应该适用于您的查询

select tbl_info.heading as Heading,component_psar.col_1 as Value 
from tbl_info 
inner join component_psar on component_psar.tbl_id = tbl_info.id
order by tbl_info.heading
这将为您提供以下查询结果

Heading   | Value 
----------+--------------
Greetings |  Hello
Greetings |  Hi
Greetings |  What's up?
如何处理此显示取决于您的编程环境

如果您只是在屏幕上打印,下面的伪代码将显示如何仅在标题更改时打印标题

current_heading = ""
for each row in results
    if row.heading not equal to current_heading   
        current_heading  = row.heading
        print blank line 
        print current_heading 
    end if
    print row.value
loop

您想要执行的操作确实是一个pivot,但与其他一些RDBMS不同,MySQL并不支持它。有一些方法可以完成同样的结果,但是首先你应该考虑这是否是你想要/需要做的?检索具有多个tbl_info.id的结果集时会发生什么情况?您显然希望结果中有多个列,但是行如何看?我可能应该提到“ID”是TBLYFILE的主键,因此检索多个结果不是问题。多个结果仍然可以返回:考虑附加记录TBLYID、COLLY1=2、“组件”PSAR和ID中的“FoO”、标题=2的情况;tbl_信息中的“酒吧”。我恐怕不明白你在这里的意思。在这种情况下,“bar”将是结果集中列的标题,“foo”将是列中的数据。我看不出有什么问题……我的问题是:您显然希望结果中有多个列,但这些行看起来如何?特别是,每行都有酒吧吗?和你好,你好还是怎么了?还是换一排?其他字段中有什么?您正在寻求执行的操作确实是一个pivot,但与其他一些RDBMS不同,MySQL不支持它。有一些方法可以完成同样的结果,但是首先你应该考虑这是否是你想要/需要做的?检索具有多个tbl_info.id的结果集时会发生什么情况?您显然希望结果中有多个列,但是行如何看?我可能应该提到“ID”是TBLYFILE的主键,因此检索多个结果不是问题。多个结果仍然可以返回:考虑附加记录TBLYID、COLLY1=2、“组件”PSAR和ID中的“FoO”、标题=2的情况;tbl_信息中的“酒吧”。我恐怕不明白你在这里的意思。在这种情况下,“bar”将是结果集中列的标题,“foo”将是列中的数据。我看不出有什么问题……我的问题是:您显然希望结果中有多个列,但这些行看起来如何?特别是,每行都有酒吧吗?和你好,你好还是怎么了?还是换一排?其他字段中有什么?问题已标记。为什么要费心在标题=?问题被标记的地方选择标题呢。为什么还要麻烦选择heading,其中heading=?这看起来是一个合理的解决方案。如果可以的话,我想让查询返回tbl_info中的值作为component_psar中数据的标题,但是如果不可能,我应该能够完成这项工作。谢谢。这个看起来像 这是一个明智的解决办法。如果可以的话,我想让查询返回tbl_info中的值作为component_psar中数据的标题,但是如果不可能,我应该能够完成这项工作。谢谢