我有两个表-车辆和员工。
车辆具有两个字段-1)所有者(指员工ID)2)Assigned_to :(指员工ID)。
我想创建一个拥有者并分配给名字的报告。当我删除where子句时,以下查询有效,但使用where子句则错误为
where子句中的未知列O.firstname。
SELECT V.*, CONCAT(O.firstname,' ',O.lastname) AS ownerName,
CONCAT(A.firstname,' ',A.lastname) AS assigneeName
FROM vehicles AS V LEFT JOIN employees AS O ON V.owner=O.id
LEFT JOIN employees AS A ON V.assigned_to=A.id
WHERE (`O.firstname` LIKE '%xyz%' OR `O.lastname` LIKE '%xyz%' OR `A.firstname` LIKE '%xyz%' OR `A.lastname` LIKE '%xyz%' OR `V.license_state` LIKE '%xyz%' OR `V.make` LIKE '%xyz%' OR `V.model` LIKE '%xyz%' )
有什么解决方法吗?
在您的WHERE子句中,表别名为
`O.firstname`
这是错误的方法,您可以对列名应用反引号,而不是对表别名使用,
O.`firstname`
另外,如果您将LEFT JOIN
相关条件LEFT JOIN
本身而不是WHERE
从句中应用,那么如果employees
表中没有条目,则不会失败:
因此查询将是:
SELECT V.*,
CONCAT(O.firstname, ' ', O.lastname) AS ownerName,
CONCAT(A.firstname, ' ', A.lastname) AS assigneeName
FROM vehicles AS V
LEFT JOIN employees AS O ON V.owner = O.id AND (A.`firstname` LIKE '%xyz%' OR A.`lastname` LIKE '%xyz%')
LEFT JOIN employees AS A ON V.assigned_to = A.id AND (V.`license_state` LIKE '%xyz%' OR V.`make` LIKE '%xyz%' OR V.`model` LIKE '%xyz%')
WHERE O.`firstname` LIKE '%xyz%' OR O.`lastname` LIKE '%xyz%'
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句