在这个mysql语句中避免子查询

在这个mysql语句中避免子查询,mysql,subquery,entity-attribute-value,Mysql,Subquery,Entity Attribute Value,我有一个问题,如下所述: select a_value as itemname, ( select a_value from attributes where a_name = 'EAN' ) AS EAN from attributes where a_name = 'NAME'; 在这里,我希望使用不同的where子句从同一个表中获得两个值,并且我也将它们显示在同一个前端表中。我可以在这里避免子查询吗?试试这个: SELECT a1.a_value AS itemname, a

我有一个问题,如下所述:

select a_value as itemname, (
    select a_value from attributes where a_name = 'EAN'
) AS EAN 
from attributes 
where a_name = 'NAME';
在这里,我希望使用不同的where子句从同一个表中获得两个值,并且我也将它们显示在同一个前端表中。我可以在这里避免子查询吗?

试试这个:

SELECT a1.a_value AS itemname, a2.a_value AS EAN 
FROM attributes a1 
LEFT JOIN attributes a2 ON s2.a_name = 'EAN'  
WHERE a_name = 'NAME';

SELECT a_value 
FROM attributes 
WHERE a_name IN ('NAME', 'EAN');
SELECT MAX(IF(a_name = 'NAME', a_value, NULL)) AS itemname, 
       MAX(IF(a_name = 'EAN', a_value, NULL)) AS EAN 
FROM attributes 
WHERE a_name IN ('NAME', 'EAN');

SELECT a_value 
FROM attributes 
WHERE a_name IN ('NAME', 'EAN');
SELECT MAX(IF(a_name = 'NAME', a_value, NULL)) AS itemname, 
       MAX(IF(a_name = 'EAN', a_value, NULL)) AS EAN 
FROM attributes 
WHERE a_name IN ('NAME', 'EAN');

这会将两个值作为单独的行返回:

从属性中选择一个_值作为itemname,该属性中的_名称位于('EAN','name')中

是否需要将所有结果作为一行返回? 您是否需要完全独立的where子句(而不仅仅是不同的值)

在应用程序中,获取两行,然后将其透视到单个数组中:

$item = array();
while ($row = fetch()) { -- pseudocode
  $item[ $row["a_name"] ] = $row["a_value"];
}
print_r($item);
您可能希望在SQL中执行此操作,但看起来是这样的:

SELECT aname.a_value AS itemname, aean.a_value AS EAN
FROM attributes AS aname
JOIN attributes AS aean ON aname.entity = aean.entity
WHERE aname.a_name = 'NAME' AND aean.a_name = 'EAN';
将来需要三个属性时,它会变得更复杂。基本上,对于您想要的每个附加属性,还需要一个自连接。在一个查询中可以执行的联接数量有一个实际限制,因此此解决方案不能按比例放大


GroupBy也有一个解决方案,但它也很难编写,而且性能很差。

我不明白你在这里的意思。你能提供样品记录吗?如果此子查询
从属性中选择一个\u值,其中一个\u名称='EAN'
返回多个值,它只会生成一个错误。