2013-02-08 14 views
1

值我有2個表:MySQL的拿幾張列關聯在一個查詢

STEP 
id 
value 




SCALE 
id 
s1 
s2 
s3 
s4 
s5 
s6 

現在step.id是外鍵scale.s1,scale.s2,scale.s3等 我想規模.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 ; 
+0

只需加入STEP六次。 – 2013-02-08 20:22:04

+0

我會考慮設計不同的表格。 Step {StepId,value},Scale {ScaleId},ScaleStep {ScaleId,StepId},以便您可以進行簡單的連接。 – 2013-02-08 20:48:38

+0

你可以給我加入步驟六次的語法請@ C.Ramseyer因爲我有麻煩得到它... thnx – 2013-02-08 23:19:12

回答

0

只需加入多次。以下是前三項:

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 
0

您可以使用單個查詢與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

祝你好運。