我需要一个只会提取与用户提供的搜索查询匹配的记录的查询。棘手的部分是用户正在搜索的信息在另一个表中。我的应用程序是从名为“计算机”的表中提取记录。在“计算机”内部,有一列具有打印机的ID号(default_printer)。所有打印机信息(例如名称(用户正在搜索)都位于用户正在搜索的“打印机”表中。
当然,我需要列出所有计算机信息,但同时将'computers'表中的ID解析为'printers'表中的名称。这是我到目前为止提出的查询:
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 - 'on子句'中的未知列'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
我被困住了,帮帮忙!
答案 0 :(得分: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%'
答案 1 :(得分:1)
p.name和default_printer
之间缺少逗号