我有一个包含两个表的数据库,component_psar和tbl_info。 component_psar表有字段'tbl_id',它引用tbl_info中相应的'id'字段。
我需要编写一个查询,其中数据来自tbl_info,并用作component_psar中该列的标题。
因此,如果component_psar表包含数据:
tbl_id | col_1 1 | Hello 1 | Hi 1 | What's up?
然后是tbl_info表:
id | heading 1 | Greetings
我希望它显示为:
Greetings Hello Hi What's up?
我编写了以下SQL查询来尝试完成此任务:
SELECT component_psar.col_1 as (SELECT tbl_info.heading FROM tbl_info, component_psar WHERE tbl_info.id = '1') FROM tbl_info, component_psar WHERE (component_psar.tbl_id = '1')
但这只会引发语法错误:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(SELECT tbl_info.heading FROM tbl_info, component_psar WHERE tbl_info.id = compo' at line 1
任何人都可以就如何实现这一目标提出任何建议吗?看看其他问题让我读到数据透视表,但我没有看到任何方式可能对我的目的有用。也许我误解了它。
非常感谢任何帮助。
答案 0 :(得分:2)
我会尝试分离从数据库中检索数据并将其格式化以便显示的过程。
简单的内部联接应该适用于您的查询
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
答案 1 :(得分:-1)
在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)
但是,此解决方案是一个代码段,而不是一个查询。