2012-11-20 71 views
0

Possible Duplicate:
MySQL #1054 unknown column的MySQL查詢 - #1054 - 未知列3

我需要一個查詢,將拉只匹配用戶提供的搜索查詢其記錄。棘手的部分是用戶正在搜索的信息位於另一個表中。我的應用程序正在從名爲「計算機」的表中拉取記錄。 「計算機」內部有一列有一個打印機的ID號(default_printer)。所有打印機信息(如用戶正在搜索的名稱)位於用戶正在搜索的「打印機」表中。

所以我很自然地需要列出所有的計算機信息,但同時要將「計算機」表內的ID解析爲「打印機」表內的名稱。下面是我想出來的,到目前爲止查詢:

 SELECT c.id, c.name, p.name default_printer, c.description 
     FROM computers c, groups g 
INNER JOIN printers p 
     ON g.default_printer = p.id OR c.default_printer = p.id 
     WHERE p.name LIKE 'mfd%' 

的問題是,我發現了錯誤:#1054 - 在「關於條款」未知列「c.default_printer」。 'computers'表有一個名爲'default_printer'的列。

這裏是我的表模式:

Table name: computers 
Columns: id, name, description, default_printer, report_date, guid 

Table name: printers 
Columns: id, name, path, location, description 

Table name: groups 
Columns: id, name, description, default_printer 

我卡住了,求助!

+1

請仔細看看您發佈的查詢。 –

+0

「groups」的表格模式是什麼? – Ray

+0

@ N.B。我有。相信我,除非我真的陷入困境,否則我不會在這裏發帖。我吮吸SQL查詢,但這只是讓我感到困惑。 – Nykad

回答

2

的連接和顯式連接符號不要混合使用逗號符號之間的逗號,你會失去訪問一些你的別名的。如果您無權訪問別名,則無法引用其列。我假設組有一列id

另外,正如其他地方所指出的,我建議您在對此進行故障排除和清晰時爲標籤「default_printer」使用不同的名稱。

SELECT c.id, c.name, p.name the_default_printer, c.description 
    FROM computers c 
    INNER JOIN groups g ON g.id = c.guid 
    INNER JOIN printers p 
    ON g.default_printer = p.id OR c.default_printer = p.id 
    WHERE p.name LIKE 'mfd%' 
+0

感謝您的建議。我很確定明白你在說什麼。爲了清楚起見,我必須將groups表中的'default_printer'列與'printers'表中的'id'列進行匹配。感謝您的幫助。 – Nykad

1

你缺少p.name和default_printer

+3

default_printer是p.name的別名。該空間意味着'AS'關鍵字。從我所瞭解的這是有效的語法。 – Nykad

+1

我嘗試了'AS'關鍵字。沒有不同。它抱怨c.default_printer。 – Nykad