我不确定这是否可行,并且描述确实很难。MySQL - 选择内的子查询
我想以这种方式返回SELECT
查询:
pID | Name | Email | Dog Name | Fish Name ------------------------------------------------------- 44 | John | [email protected] | Scruffy | 56 | Jane | [email protected] | | Puffer 72 | Joe | [email protected] | Sparky | Gill
有3个表: tbl_option_fields
tbl_person
tbl_person_optionals
第一个表只定义无限的可选字段。下面是列:
optid | opttitle ------------------ 1 | Dog Name 2 | Fish Name 3 | Email
第二个表只是,我保证数据的人:
pID | Name --------------- 44 | John 56 | Jane 72 | Joe
最后一个表让我存储的存在是有pID
ID | pID | optid | optval ---------------------------------- 1 | 44 | 1 | Scruffy 2 | 56 | 2 | Puffer 3 | 72 | 1 | Sparky 4 | 72 | 2 | Gill 5 | 72 | 3 | [email protected] 6 | 56 | 3 | [email protected] 7 | 44 | 3 | [email protected]任何可选数据
SELECT语句的结果需要在结果的标题中显示opttitle
。 我不擅长子查询,这可能是一个愚蠢的。
这里是我的尝试:
SELECT p.*, opt.optval
FROM `tbl_person` p
LEFT OUTER JOIN `tbl_person_optionals` opt ON p.pID = opt.pID
WHERE 1
此查询导致重复的结果,我相信我明白为什么。
pID | Name | optval ----------------------------- 44 | John | [email protected] 44 | John | Scruffy 56 | Jane | [email protected] 56 | Jane | Puffer 72 | Joe | [email protected] 72 | Joe | Sparky 72 | Joe | Gill
希望我解释说我想水平显示可选字段,而不是行中的新记录。 可以这样做吗?
你在找什么是一个数据透视查询,但mysql不直接支持它们。有解决方法,但它们会导致丑陋的语法,并且当您在旋转结果中添加/需要更多列时,它们不会自动放大。 –
这可能是我需要听到的。谢谢! – coffeemonitor