Неизвестный столбец в предложении on, где используются фильтры фактических значений - PullRequest
0 голосов
/ 01 января 2019

Я генерирую этот запрос с помощью knex с MYSQL, и он дает ER_BAD_FIELD_ERROR: Unknown column '5025052' in 'on clause'.Как я могу заставить его работать?

POINT : есть связанные с этим вопросы, но, похоже, они не связаны с фильтрацией по фактическим значениям поля, например t1.user_id = "5025052".Мне посоветовали включить все фильтры в join clause вместо использования where clouse по некоторым причинам производительности.Если не правда, я готов учиться.

SELECT 
    `t1`.*, `users`.`phone`, `users`.`email`
FROM
    `t1`
        INNER JOIN
    `users` ON `users`.`id` = `t1`.`user_id`
        AND `t1`.`user_id` = `5025052`
        AND `t1`.`deleted` = 0
        AND `users`.`deleted` = 0;

1 Ответ

0 голосов
/ 01 января 2019

Обратные пометки предназначены для экранирования имени столбца и таблицы, а не для значений.

Замените

AND `t1`.`user_id` = `5025052`

на

AND `t1`.`user_id` = 5025052

или если это varcharзатем используйте кавычки

AND `t1`.`user_id` = '5025052'

И нет необходимости (и редко) ставить все условия в предложении join.Таким образом, вы также можете сделать:

SELECT t1.*, users.phone, users.email
FROM t1
INNER JOIN users ON users.id = t1.user_id
WHERE t1.user_id = '5025052'
  AND t1.deleted = 0
  AND users.deleted = 0;

При использовании knex вы можете удалить ненужные галочки с помощью knex.raw().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...