MySQL Query с и соединением и производной таблицей - PullRequest
0 голосов
/ 16 июня 2019

Я пытаюсь добавить количество строк в существующий запрос, но получаю сообщение об ошибке

неизвестный столбец 'pl.GroupNumber' в 'предложении'

Я, очевидно, тоже собираюсь ответить на этот вопрос, если это поможет кому-то еще, поскольку, написав все это здесь, мне пришло в голову отменить ОТ:

* ОТ(ВЫБЕРИТЕ @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;

1 Ответ

1 голос
/ 17 июня 2019

Не используйте запятые в предложении 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...