SQL QUERY:在测试查询时,我可以获取不同的行值并将其显示为不同的列吗?

时间:2017-04-02 12:12:56

标签: mysql sql sqlyog

1 个答案:

答案 0 :(得分:0)

这里的问题是,当您将行B中的值显示为附加到行A的列时,您需要指定为什么该值恰好来自行B(而不是行,而不是行) C)。你可以将它放在一定程度上,但这在MySQL中越来越被弃用(而在其他版本的SQL中则不可能)。出于同样的原因,如果GROUP BY某些列,则不应在SELECT中指定非GROUP或非聚合值;否则引擎应选择哪个值是不明确的。

所以你问的问题与为每列做JOIN是一样的:

SELECT maintable.*, 
    b.location_nr AS col2, 
    c.location_nr AS col4, 
    d.location_nr AS col5
FROM maintable
    LEFT JOIN maintable AS b ON (... AND b.type = 2)
    LEFT JOIN maintable AS c ON (... AND c.type = 4)
    LEFT JOIN maintable AS d ON (... AND d.type = 5)
WHERE maintable.type = 42;

所以在这里你得到42型的所有记录,然后,如果其中一个(Juan)在同一个表中也有类型2的记录,那么它将出现在列col2中,依此类推。

如果不存在这样的行,则col2将被赋值为NULL。如果出现多个行,那么您将获得多行。

另一种选择:

SELECT ..., 
   (SELECT location_nr FROM maintable AS b WHERE ... AND b.type = 2) AS col2,
   ...

在这里,您也必须为要获取的辅助记录提供JOIN条件。

-

也就是说,您可能最好更改数据库布局并添加“属性”表,只将主要信息保留在主表中。