База данных сообщила о синтаксической ошибке: повторяющееся имя столбца 'Product_Number' - PullRequest
0 голосов
/ 13 марта 2020

Это говорит о том, что база данных сообщила о синтаксической ошибке:

Дублированное имя столбца 'Product_Number'.

Ниже приведен код:

SELECT * 
FROM `df_all_orders_merged_la` 
LEFT JOIN `product_database_la` 
    ON `df_all_orders_merged_la`.`Product_Number` = `product_database_la`.`Product_Number`
WHERE `product_database_la`.`Product_Number` IS NULL;

Ответы [ 2 ]

0 голосов
/ 13 марта 2020

На самом деле вы присоединяетесь к таблице, и новая временная таблица формируется на основе столбца Product_Number в обеих родительских таблицах, поэтому в новой таблице будут сформированы два повторяющихся столбца.

Теперь, когда вы вызываете, выберите * from ..., из-за * в запросе на выборку mysql не знает, какой именно столбец Product_Number вы хотите выбрать, так как столбец с двумя одинаковыми именами в этой новой таблице неоднозначен для него без какой-либо спецификации (например, Product_Name какого родителя таблицу, которую вы хотите видеть), потому что astrick (*) заменяет * в запросе все имена столбцов в указанной таблице (без указания родительской таблицы, и иногда возникает проблема c в случае объединений, когда имя столбца имеет / имеет то же имя, но разные родительские таблицы).

Подумайте, если вы звоните только по имени столбца, как mysql узнает, какой столбец родительской таблицы должен отображаться, так как имя может быть одинаковым, но есть вероятность, что содержание может быть разным или просто другим и он не может знать таким образом, какой именно тип столбца вы хотите. возможно, он показывает какой-то случайный столбец среди дубликатов, но вы хотели, чтобы какой-то другой столбец имел такое же имя!

, поэтому способ выбора в этом случае заключается в указании имени всего уникального столбца только по имени столбца ( Вы также можете указать родительскую таблицу, но это не имеет значения) без указания родительской таблицы, а для дублированного столбца вам нужно будет позвонить как

select `df_all_orders_merged_la`.`Product_Number,`product_database_la`.`Product_Number` from (... your join query here ...);

, то есть указать родительскую таблицу столбца, из которого вы хотите показать как и выше, для вашего удобства снова можно указать псевдоним родительских таблиц

0 голосов
/ 13 марта 2020

Если оба значения df_all_orders_merged_la и product_database_la содержат столбец с именем product_number, вы получите эту ошибку.

Вам нужно устранить неоднозначность вашего запроса с помощью таблицы псевдонимы, такие как буквы p и m в этом переписанном запросе:

 SELECT m.* 
 FROM `df_all_orders_merged_la` m
   LEFT JOIN `product_database_la` p
ON m.`Product_Number` = p.`Product_Number`
WHERE p.`Product_Number` IS NULL;

Здесь я использовал буквы p и m для ссылки на конкретные таблицы в FROM и JOIN раздел. Также обратите внимание, что я сделал с предложением SELECT: я больше ничего не извлекаю из таблицы p. (Но я сделал это только для того, чтобы избавиться от непосредственной неоднозначности ...)

В общем, я рекомендую вам указать поля, которые вам действительно нужны в вашем результате, вместо того, чтобы полагаться на костыль SELECT * в любой из его многочисленных форм. Документ, в запросе, какие столбцы вам действительно нужны, и из каких таблиц они получены:

 SELECT m.order_id, p.product_number, p.product_name [...]
...