【问题标题】:MySQL get several column associated values in one queryMySQL在一个查询中获取多个列关联值
【发布时间】:2013-02-08 20:10:12
【问题描述】:

我有 2 张桌子:

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 ;

【问题讨论】:

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

标签: mysql select field


【解决方案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

【讨论】:

    【解决方案2】:

    您可以使用带有MAXCASE 的单个查询来完成:

    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
    

    这里是Fiddle

    祝你好运。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-16
      • 2011-04-03
      • 1970-01-01
      • 2017-05-03
      • 1970-01-01
      • 2021-10-28
      • 1970-01-01
      • 2015-10-14
      相关资源
      最近更新 更多