我正在尝试将行计数添加到现有查询中,但出现错误
“ on子句”中的未知列“ pl.GroupNumber”
我显然也会回答这个问题,以防它对其他人有帮助,因为在这里写下所有这些之后,我想到将FROM改为:
* FROM(SELECT @row_number:= 0)AS t,parts_listing pl *
这似乎可以解决问题!不太了解它为什么起作用,但确实起作用。
SELECT DISTINCT
(@row_number:=@row_number + 1) AS RowNum,
pl.ID,
pn.ID AS SubID,
IF(ListType,(SELECT MAX(ID) FROM parts_notes
WHERE PageNo=429
AND ListType IS NOT NULL AND SubPage IS NULL AND
(BasePart IS NOT NULL AND Models IS NOT NULL
AND (BasePart=pl.PartNo
AND pl.Models LIKE CONCAT('%', Models ,'%')))
OR (BasePart IS NOT NULL AND Models IS NULL
AND BasePart=pl.PartNo) ),NULL) AS SubMax,
ListType,
IndentText,
BaseGroup,
BaseName,
GroupName,
Title,
`Name`,
pl.Models,
pl.PartNo,
pn.PartNo AS SubPartNo,
pl.Quantity,
pn.Quantity AS SubQuantity,
pn.Description AS SubDescription,
ListType,
Column_1,
Column_2,
Column_3,
Column_4,
Column_5,
Column_6,
Column_7,
Column_8,
COALESCE(pl.GroupNumber, pn.GroupNo) AS GroupNo,
COALESCE(pl.Description, pn.Description) AS Description,
COALESCE(pl.PageNo, pn.PageNo) AS PageNo,
COALESCE(pl.SubPage, pn.SubPage) AS SubPage,
COALESCE(pl.RevDate, pn.RevDate) AS RevDate,
COALESCE(pl.Edition, pn.Edition) AS Edition
FROM parts_listing pl, (SELECT @row_number:=0) AS t
LEFT JOIN parts_notes pn ON pl.GroupNumber=pn.GroupNo
AND ((ListType < 5 AND (pl.PartNo=BasePart AND BasePart IS NOT NULL) OR BasePart IS NULL)
OR ((ListType > 4) AND (pl.GroupNumber=pn.GroupNo OR pl.PartNo=BasePart)))
WHERE BaseGroup=30 AND pl.PageNo=429 AND (pl.SubPage IS NULL
AND pn.SubPage IS NULL)
AND (pl.PageNo = pn.PageNo OR pn.PageNo IS NULL)
AND (pl.SubPage = pn.SubPage OR pn.SubPage IS NULL)
ORDER BY pl.ID, pn.ID
LIMIT 150;
答案 0 :(得分:1)
即使打算使用FROM
,也不要在CROSS JOIN
子句中使用逗号。作用域规则不是您所期望的,这就是为什么您看到未知列的原因。
我将参数条件放在最后,所以我将其写为:
FROM parts_listing pl LEFT JOIN
parts_notes pn
ON pl.GroupNumber = pn.GroupNo AND
((ListType < 5 AND
(pl.PartNo = BasePart AND BasePart IS NOT NULL
) OR BasePart IS NULL
) OR
((ListType > 4) AND
(pl.GroupNumber = pn.GroupNo OR pl.PartNo = BasePart)
)
) CROSS JOIN
(SELECT @row_number := 0) params