2010-06-14 54 views
0

我是一名盡我所能理解表別名的平面設計師,但它不工作。 這是我到目前爲止有:現在試圖在SQL中使用表別名

SELECT colours.colourid     AS colourid1, 
     combinations.manufacturercolourid AS colourmanid1, 
     colours.colourname    AS colourname1, 
     colours.colourhex     AS colourhex1, 
     combinations.qecolourid2   AS colouridqe2, 
     colours.colourid     AS colourid2, 
     colours.colourname    AS colourname2, 
     colours.colourhex     AS colourhex2, 
     colours.colourid     AS colourid3, 
     combinations.qecolourid3   AS colouridqe3, 
     colours.colourname    AS colourname3, 
     colours.colourhex     AS colourhex3, 
     colours.colourid     AS colourid4, 
     combinations.qecolourid4   AS colouridqe4, 
     colours.colourname    AS colourname4, 
     colours.colourhex     AS colourhex4, 
     combinations.coloursupplierid 
FROM combinations 
     INNER JOIN colours 
     ON colours.colourid = combinations.manufacturercolourid; 

,這個想法是,在顏色查找表,該ID將拉動從查找表的顏色代碼,十六進制和名稱,以便我可以拉的顏色代碼,十六進制和我正在尋找的4種顏色的名稱。我可以得到這個工作,但它只拉第一個名字,代碼和十六進制,我只是沒有看到我做錯了什麼。

+0

把代碼放在裏面,並且分隔線條,這是非常難以閱讀的 – 2010-06-14 21:03:17

+0

您可能希望用'colours'和'combinations'表中的示例'SELECT *'更新問題,而且您可能還想要提供預期的產出。 – 2010-06-14 21:10:50

回答

3

你的問題是,你只在顏色表中鏈接一條記錄,因爲你的SQL只有一個JOIN。該記錄將匹配manufacturer_colour_id指定的顏色。

您可能還有一個問題,就是您的組合表格看起來不是正常的正常形式(儘管我可能是錯的,不知道您想要表示的數據的實際性質)。

如果我正確理解你的問題,解決方法(使用當前的表結構)將更多的東西一樣:

SELECT C1.colourid    AS colourid1, 
    CMB.manufacturercolourid  AS colourmanid1, 
    C1.colourname    AS colourname1, 
    C1.colourhex     AS colourhex1, 
    CMB.qecolourid2    AS colouridqe2, 
    C2.colourid     AS colourid2, 
    C2.colourname    AS colourname2, 
    C2.colourhex     AS colourhex2, 
    C3.colourid     AS colourid3, 
    CMB.qecolourid3    AS colouridqe3, 
    C3.colourname    AS colourname3, 
    C3.colourhex     AS colourhex3, 
    C4.colourid     AS colourid4, 
    CMB.qecolourid4    AS colouridqe4, 
    C4.colourname    AS colourname4, 
    C4.colourhex     AS colourhex4, 
    CMB.coloursupplierid 
FROM combinations CMB 
    LEFT OUTER JOIN colours C1 
    ON C1.colourid = CMB.manufacturercolourid 
    LEFT OUTER JOIN colours C2 
    ON C2.colourid = CMB.qecolourid2 
    LEFT OUTER JOIN colours C3 
    ON C3.colourid = CMB.qecolourid3 
    LEFT OUTER JOIN colours C4 
    ON C4.colourid = CMB.qecolourid4 

這裏發生的事情是,我鏈接的顏色表四次,一次組合表中的每個colour_id字段。爲此,我需要每次別名表名,以便知道在返回列列表中使用四種可能的顏色實例中的哪一種。另外,如果一個或多個colour_id列可能爲空,我正在使用OUTER JOIN。如果INNER JOIN發生這種情況,整行就會退出結果集。

+0

謝謝,我結束了一些非常相似的事情,但至少我明白我現在在做什麼。 – stephmoreland 2010-09-18 12:39:30

3

您可以使用表的別名,以減少所需的鍵入量 - 通過添加這樣的事情:

SELECT 
    cl.colourid     AS colourid1, 
    cb.manufacturercolourid AS colourmanid1, 
    cl.colourname    AS colourname1, 
    ... and so on..... 
FROM 
    combinations AS cb 
INNER JOIN 
    colours AS cl ON cl.colourid = cb.manufacturercolourid; 

通過定義表的別名cb爲你的餐桌combinations,你可以在你選擇使用較短的別名和你的陳述的其他部分,而不必總是拼出整個表名。

但你的問題確實是在JOIN - 你只參加過一次,但你希望得到四個結果回來....

你需要做的是這樣的:

SELECT 
    col1.colourid   AS colourid1, 
    cb.manufacturercolourid AS colourmanid1, 
    col1.colourname   AS colourname1, 
    col1.colourhex   AS colourhex1, 

    cb.qecolourid2   AS colouridqe2, 
    col2.colourid   AS colourid2, 
    col2.colourname   AS colourname2, 
    col2.colourhex   AS colourhex2, 
    col2.colourid   AS colourid3, 

    cb.qecolourid3   AS colouridqe3, 
    col3.colourname   AS colourname3, 
    col3.colourhex   AS colourhex3, 
    col3.colourid   AS colourid4, 

    cb.qecolourid4   AS colouridqe4, 
    col4.colourname   AS colourname4, 
    col4.colourhex   AS colourhex4, 
    cb.coloursupplierid 
FROM 
    combinations cb 
INNER JOIN colours AS col1 ON col1.colourid = cb.manufacturercolourid 
INNER JOIN colours AS col2 ON col2.colourid = cb.qecolourid2 
INNER JOIN colours AS col3 ON col3.colourid = cb.qecolourid3 
INNER JOIN colours AS col4 ON col4.colourid = cb.qecolourid4 
2

這不是一個詳盡的答案,但是你的問題與你如何使用JOIN有關。表和列別名不會影響輸出結果集。

您正在選擇相同的字段名稱四次,這就是爲什麼你會得到奇怪的結果。

+2

是的。正如「問題」註釋中所建議的那樣,列出兩個表中的列的描述,每行中的一行或三行樣本數據,以及您希望返回的行/列的示例。 – 2010-06-14 21:15:04

0

這些都是偉大的,但由於某些原因,當我嘗試使用它們,我在頁面上得到一個錯誤:

[微軟] [ODBC Microsoft Access驅動程序]語法錯誤(缺少操作員)在查詢表達式

我想我明白如何使用表別名,但由於某種原因,即使我確定它應該工作,頁面不喜歡它。