2014-03-12 119 views
2

我有三個表SQL查詢的三個表

表1 color_sets_infoset_id(PK),set_name

表2 colorsset_id(FK),color_id (PK),color_name,color_formula

表3. mixed_colorscolor_id1(FK),color_id2(FK),color_formula


外鍵colors.set_id引用color_sets_info.set_id

外鍵mixed_colors.color_id1引用colors.color_id

外鍵mixed_colors.color_id2引用colors.color_id


如何從mixed_colors具體set_namecolor_formula和所有相關的列得到:

colors.color_name(爲mixed_colors.color_id1),

colors.color_name(爲mixed_colors.color_id2),

color_sets_info.set_name(爲第一colors.color_name),

color_sets_info.set_name(對於第二個colors.color_name

mixed_colors.color_formula


例如:

color_sets_info   colors 
+--------+-----------+ +--------+----------+------------+---------------+ 
| set_id | set_name | | set_id | color_id | color_name | color_formula | 
+--------+-----------+ +--------+----------+------------+---------------+ 
| 1  | somename1 | | 1  | 1  | black  | R0G0B0  | 
| 2  | somename2 | | 1  | 2  | yellow  | R255G255B0 | 
| 3  | somename3 | | 2  | 3  | green  | R0G255B255 | 
+--------+-----------+ | 3  | 4  | red  | R255G0B0  | 
          +--------+----------+------------+---------------+ 

mixed_colors 
+-----------+-----------+---------------+ 
| color_id1 | color_id2 | color_formula | 
+-----------+-----------+---------------+ 
| 1   | 4   | R127G0B0  | 
| 2   | 3   | R127G255B127 | 
| 3   | 1   | R0G127B127 | 
+-----------+-----------+---------------+ 

我需要從mixed_colorscolor_formula和兩個set_names和兩個color_names每個混合色,其中1)僅使用somename1somename2顏色組以獲得2)R127G0B0公式

+0

哪些是你使用,MySQL或SQLServer數據庫?你已經嘗試過哪些SQL? – talegna

+0

抱歉,sqlite ...... – Pylyp

+0

我知道如何爲兒童構建SQL,例如'SELECT color_sets_info.set_name,color_name,color_formula FROM colors JOIN color_sets_info ON colors.set_id = color_sets_info.set_id',但被子clidrens卡住,特別是在** mixed_colors **中有兩個'color_id' ** – Pylyp

回答

2
SELECT 
    m.color_formula, 
    cs1.set_name AS set_name1, 
    c1.color_name AS color_name1, 
    cs2.set_name AS set_name2, 
    c2.color_name AS color_name2 
FROM 
    mixed_colors m 
    JOIN colors c1 ON 
     m.color_id1 = c1.color_id 
    JOIN color_sets_info cs1 ON 
     c1.set_id = cs1.set_id 
    JOIN colors c2 ON 
     m.color_id2 = c2.color_id 
    JOIN color_sets_info cs2 ON 
     c2.set_id = cs2.set_id; 

或者,如果你喜歡,你可以先收集顏色和colorsets成一個觀點:

CREATE VIEW vw_colors AS 
SELECT 
    color_id, 
    set_id, 
    color_name, 
    set_name 
FROM 
    colors c 
    JOIN color_sets_info cs ON 
     c.set_id = cs.set_id; 

,然後在該查詢:

SELECT 
    m.color_formula, 
    v1.set_name AS set_name1, 
    v1.color_name AS color_name1, 
    v2.set_name AS set_name2, 
    v2.color_name AS color_name2 
FROM 
    mixed_colors m 
    JOIN vw_colors v1 ON 
     m.color_id1 = v1.color_id 
    JOIN vw_colors v2 ON 
     m.color_id2 = v2.color_id; 
+0

謝謝! – Pylyp