0

我正在尝试向现有查询添加行数,但出现错误

“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;
4

1 回答 1

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
于 2019-06-17T00:29:26.963 回答