2016-05-14 34 views
1

我有一個MySQL表像如何Mysql的行映射與MySQL列

主題表

id|markid |name 
--|-------|-------- 
1 |1  |subject1 
2 |2  |subject2 
3 |3  |subject3 
4 |4  |subject4 

標記表

id|Mark1|mark2|Mark3|mark4 
--|-----|-----|-----|------ 
1|96 |95 |96 |98 

我預期的結果是一樣

Mark|subject 
    ----|-------- 
    96 |subject1 
    95 |subject2 
    96 |subject3 
    98 |subject4 
+1

規範化的標記表 – Strawberry

+0

我怎樣才能做到這一點? –

+0

我創建了一個答案,顯示如何規範化。但我不得不問,你是否有必要在單獨的桌子上留下印記。爲什麼不把標記放在與主題相同的表格中? –

回答

3

我不知道爲什麼你的標籤樂的設計是這樣的,無論如何,如果你只是想這樣的結果,你可以試試下面的SQL語句,可能會幫助你;)

SQL Fiddle

的MySQL 5.6架構設置

CREATE TABLE Subject 
    (`id` varchar(2), `markid` varchar(7), `name` varchar(8)) 
; 

INSERT INTO Subject 
    (`id`, `markid`, `name`) 
VALUES 
    ('1', '1', 'subject1'), 
    ('2', '2', 'subject2'), 
    ('3', '3', 'subject3'), 
    ('4', '4', 'subject4') 
; 


CREATE TABLE Mark 
    (`id` varchar(2), `Mark1` varchar(5), `mark2` varchar(5), `Mark3` varchar(5), `mark4` varchar(6)) 
; 

INSERT INTO Mark 
    (`id`, `Mark1`, `mark2`, `Mark3`, `mark4`) 
VALUES 
    ('1', '96', '95', '96', '98') 
; 

查詢1

SELECT 
    CASE markid WHEN 1 THEN Mark1 
       WHEN 2 THEN Mark2 
       WHEN 3 THEN Mark3 
       WHEN 4 THEN Mark4 END AS Mark, 
    name AS subject 
FROM Subject 
LEFT JOIN Mark ON Mark.id = 1 

| Mark |  name | 
|------|----------| 
| 96 | subject1 | 
| 95 | subject2 | 
| 96 | subject3 | 
| 98 | subject4 | 
+0

爲什麼選擇每個標記?您可以只加入id = 1上的標記表並引用已連接表中的相應標記列。像這樣:'SELECT CASE markid \t WHEN 1 THEN標記1 \t WHEN 2 THEN標記2 \t WHEN 3 THEN MARK3 \t WHEN 4 THEN Mark4 END AS馬克,姓名FROM受試者LEFT AS受試者JOIN馬克ON Mark.id = markid ' –

+0

你是對的,謝謝;)更新。 – Blank