MySQL在一个查询中获取多个列关联值

MySQL在一个查询中获取多个列关联值,mysql,select,field,Mysql,Select,Field,我有两张桌子: STEP id value SCALE id s1 s2 s3 s4 s5 s6 现在step.id是scale.s1、scale.s2、scale.s3等的外键 我想从步骤中得到scale.s1-s6值。 我已经用嵌套选择编写了这个查询。是否可以通过一次选择获得此值 SELECT ( SELECT step.val FROM step, scale WHERE step.id = scale.s1 AND scale.id = 1) as v1,(

我有两张桌子:

STEP
id 
value




SCALE
id 
s1
s2
s3
s4
s5
s6
现在step.id是scale.s1、scale.s2、scale.s3等的外键 我想从步骤中得到scale.s1-s6值。 我已经用嵌套选择编写了这个查询。是否可以通过一次选择获得此值

SELECT (
    SELECT step.val FROM step, scale WHERE step.id = scale.s1 AND scale.id = 1) as v1,(
    SELECT step.val FROM step,scale WHERE step.id = scale.s2 AND scale.id = 1) as v2, (
    SELECT step.val FROM step,scale WHERE step.id = scale.s3 AND scale.id = 1) as v3, (
    SELECT step.val FROM step,scale WHERE step.id = scale.s4 AND scale.id = 1) as v4, (
    SELECT step.val FROM step,scale WHERE step.id = scale.s5 AND scale.id = 1) as v5, (
    SELECT step.val FROM step,scale WHERE step.id = scale.s4 AND scale.id = 1) as v6, (
    SELECT step.val FROM step,scale WHERE step.id = scale.s5 AND scale.id = 1) as v7 ;

您可以使用带有
MAX
CASE
的单个查询来执行此操作:

SELECT
  MAX(CASE WHEN scale.s1 = step.id THEN step.val END) v1,
  MAX(CASE WHEN scale.s2 = step.id THEN step.val END) v2,
  MAX(CASE WHEN scale.s3 = step.id THEN step.val END) v3,
  MAX(CASE WHEN scale.s4 = step.id THEN step.val END) v4,
  MAX(CASE WHEN scale.s5 = step.id THEN step.val END) v5,
  MAX(CASE WHEN scale.s6 = step.id THEN step.val END) v6
FROM step, scale
WHERE scale.id = 1
这是我的答案


祝你好运。

只需多次加入步骤。以下是前三点:

select s.id, s1.val as v1, s2.val as v2, s3.val as v3
from scale s
join step s1 on s.s1 = s1.id
join step s2 on s.s2 = s2.id
join step s3 on s.s3 = s3.id

只需加入第六步。我会考虑以不同的方式设计表。步骤{StepId,value},Scale{ScaleId},ScaleStep{ScaleId,StepId}所以你可以做一个简单的连接。你能给我连接步骤的语法六次吗请@C.Ramseyer,因为我很难得到它…thnx