this is a sample of the database I am working
I want something like this, displaying specific rows as a column
答案 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条件。
-
也就是说,您可能最好更改数据库布局并添加“属性”表,只将主要信息保留在主表中。