MySQL子查询返回多行并出错

MySQL子查询返回多行并出错,mysql,sql,Mysql,Sql,我这里有一个SQL语句,我需要将特定列中的行划分为行。。。但当我检索数据时,返回的是错误 1子查询返回超过1行 :(请帮忙这是我的问题 (select (SELECT (meta_value) FROM main_postmeta WHERE meta_key = 'project_year') as Year, (SELECT (meta_val

我这里有一个SQL语句,我需要将特定列中的行划分为行。。。但当我检索数据时,返回的是错误

1子查询返回超过1行

:(请帮忙这是我的问题

(select 
    (SELECT 
            (meta_value)
        FROM
            main_postmeta
        WHERE
            meta_key = 'project_year') as Year,
    (SELECT 
            (meta_value)
        FROM
            main_postmeta
        WHERE
            meta_key = 'project_gapp_city') as Location,
    (SELECT 
            (meta_value)
        FROM
            main_postmeta
        WHERE
            meta_key = 'project_title') as Title
FROM
    main_postmeta
WHERE
    main_postmeta.post_id = '1423'
ORDER BY meta_value desc);

您似乎正在寻找数据透视结果集

select 
     case when meta_key='project_year' then meta_value else null end as `YEAR`
   , case when meta_key='project_gapp_city' then meta_value else null end as `LOCATION`
   , case when meta_key='project_title' then meta_value else null end as `Title`
from main_postmeta
where main_postmeta.post_id = '1423'
order by meta_value desc
如果取数分组在单个
post\u id
下,则:

select 
     max ( case when meta_key='project_year' 
                     then meta_value 
                else null 
           end ) as `YEAR`
   , max ( case when meta_key='project_gapp_city' 
                     then meta_value 
                else null
           end ) as `LOCATION`
   , max ( case when meta_key='project_title' 
                     then meta_value 
                else null
           end ) as `Title`
from main_postmeta
where main_postmeta.post_id = '1423'
 order by meta_value desc

可能最好对每个元值进行联接,如下所示:-

SELECT a.meta_value, b.meta_value, c.meta_value
FROM main_postmeta a 
INNER JOIN main_postmeta b ON a.post_id = b.meta_key AND b.meta_key = 'project_gapp_city'
INNER JOIN main_postmeta c ON a.post_id = c.meta_key AND c.meta_key = 'project_title'
WHERE a.post_id = '1423' 
AND a.meta_key = 'project_year'
ORDER BY meta_value DESC
SELECT GROUP_CONCAT(CONCAT_WS('|', meta_key, meta_value))
FROM main_postmeta a 
WHERE a.post_id = '1423' 
AND a.meta_key IN ( 'project_gapp_city', 'project_year', 'project_title')
根据您希望对结果执行的操作,您也可以执行以下操作:-

SELECT a.meta_value, b.meta_value, c.meta_value
FROM main_postmeta a 
INNER JOIN main_postmeta b ON a.post_id = b.meta_key AND b.meta_key = 'project_gapp_city'
INNER JOIN main_postmeta c ON a.post_id = c.meta_key AND c.meta_key = 'project_title'
WHERE a.post_id = '1423' 
AND a.meta_key = 'project_year'
ORDER BY meta_value DESC
SELECT GROUP_CONCAT(CONCAT_WS('|', meta_key, meta_value))
FROM main_postmeta a 
WHERE a.post_id = '1423' 
AND a.meta_key IN ( 'project_gapp_city', 'project_year', 'project_title')

然后分解出键和值。

根据错误,子查询只能包含一行,这在您查看时也是有意义的-想象一下,如果第一个子查询返回0行,第二个子查询返回1,第三个子查询返回30,会发生什么情况。如果没有表、数据和您期望的内容,则无法正确地帮助您。也许您应该询问该任务以你尝试的方式、你所期望的和你的数据的样子来考虑。考虑提供适当的DDL(和/或SqLFIDLE)。以及所需的结果集。请提供带有一些示例数据和预期输出的表格。我可能怀疑您需要检查每个子查询中的main_postETA.post_id的值。哇,工作得很有魅力谢谢很多朋友你救了我一天:)谢谢,伙计,它就像一个魔咒一样,我只是没想到它会在盒子外面哈哈:)谢谢你,一个磨坊!!