2016-08-08 59 views
0

我有兩個表格:usersuser_fingerprintsmysql加入這兩個表格產生如下輸出

table

如何合併兩個表,產生輸出?

我試圖

select u.id, u.name, 
case f.finger (when 0 then 'y' else 'n' end) '0', 
case f.finger (when 1 then 'y' else 'n' end) '1', 
case f.finger (when 2 then 'y' else 'n' end) '2', 
case f.finger (when 3 then 'y' else 'n' end) '3', 
case f.finger (when 4 then 'y' else 'n' end) '4', 
case f.finger (when 5 then 'y' else 'n' end) '5', 
case f.finger (when 6 then 'y' else 'n' end) '6' 
from user u left join user_fingerprint f 
on u.id=f.user_id 
group by u.id 

,但結果只會從同一個ID走一排,並在輸出表更新。當我使用max函數,它的工作,但有沒有使用max

回答

0

使用聚合函數:

select u.id, u.name, 
     max(case f.finger when 0 then 'y' else 'n' end) as '0', 
     max(case f.finger when 1 then 'y' else 'n' end) as '1', 
     max(case f.finger when 2 then 'y' else 'n' end) as '2', 
     max(case f.finger when 3 then 'y' else 'n' end) as '3', 
     max(case f.finger when 4 then 'y' else 'n' end) as '4', 
     max(case f.finger when 5 then 'y' else 'n' end) as '5', 
     max(case f.finger when 6 then 'y' else 'n' end) as '6' 
from user u left join 
    user_fingerprint f 
    on u.id = f.user_id 
group by u.id; 

我建議你重新考慮使用整數作爲列別名。看起來註定會令人困惑。 。 。或更糟的是,導致難以發現錯誤。

另請注意,max()的工作原理是'y' > 'n'。還有其他方法,如果你不想依賴於此。

這也假定你想要每個列有一個彙總行。否則,你可能想要像group_concat()

+0

謝謝,有沒有其他方式沒有使用聚合函數? – tyty

+0

@tyty。 。 。你有一個聚合查詢。聚合功能是適當的。 –

+0

我已經更正了條件。對不起 – tyty

0

不知道爲什麼你不希望使用功能max,沒有max我認爲你可以做這樣的:

SELECT 
    u.id, u.name, 
    CASE WHEN LOCATE('0', GROUP_CONCAT(f.finger) THEN 'y' ELSE 'n' END `0`, 
    CASE WHEN LOCATE('1', GROUP_CONCAT(f.finger) THEN 'y' ELSE 'n' END `1`, 
    CASE WHEN LOCATE('2', GROUP_CONCAT(f.finger) THEN 'y' ELSE 'n' END `2`, 
    CASE WHEN LOCATE('3', GROUP_CONCAT(f.finger) THEN 'y' ELSE 'n' END `3`, 
    CASE WHEN LOCATE('4', GROUP_CONCAT(f.finger) THEN 'y' ELSE 'n' END `4`, 
    CASE WHEN LOCATE('5', GROUP_CONCAT(f.finger) THEN 'y' ELSE 'n' END `5`, 
    CASE WHEN LOCATE('6', GROUP_CONCAT(f.finger) THEN 'y' ELSE 'n' END `6` 
FROM USER u 
LEFT JOIN user_fingerprint f ON u.id = f.user_id 
GROUP BY u.id 

GROUP_CONCAT將Concat的所有finger每個user並以逗號分隔,然後LOCATE將返回第二個參數中第一個參數的索引。

+0

非常感謝! – tyty