Справка по синтаксису MySQL Query: ОШИБКА # 1066 - Неуникальная таблица / псевдоним - PullRequest
1 голос
/ 14 октября 2010

У меня есть четыре таблицы: user, user_billingprofile, user_shippingprofile и user_address.

пользователь: ИД пользователя, дата создания
user_billingprofile: userId, адрес
user_shippingprofile: userId, адрес
user_address: случайный адрес дерьма

Вот запрос, который я должен получить, чтобы пользователи выставляли счета и отправляли профили за один раз.

SELECT * FROM `user`
  JOIN `user_billingprofile`  ON `user`.`userId` = `user_billingprofile`.`userId`
    JOIN `user_address` ON `user_billingprofile`.`currentAddress` = `user_address`.`addressId`
  JOIN `user_shippingprofile` ON `user_shippingprofile`.`currentAddress` = `user_address`.`addressId`
    JOIN `user_address` ON `user_shippingprofile`.`currentAddress` = `user_address`.`addressId`

Я получаю ошибку: #1066 - Not unique table/alias: 'user_address'. Есть ли способ сделать простое объединение, когда к таблице обращаются дважды в одном запросе, и разделить два результата? Предпочтительно с каким-то префиксом таблицы ...

Я немного растерялся здесь. Я знаю, что могу легко сделать это в двух отдельных запросах, но я бы хотел научиться делать такие вещи за один раз.

Любая помощь / предложения / направление очень ценится, спасибо!

1 Ответ

3 голосов
/ 14 октября 2010

Можете ли вы опубликовать структуру ваших таблиц? На основании вашего запроса я бы сказал, что вам нужно немного его изменить.

При этом вы можете исправить свой текущий запрос, добавив псевдоним таблицы следующим образом:

SELECT * FROM `user`
  JOIN `user_billingprofile`  ON `user`.`userId` = `user_billingprofile`.`userId`
    JOIN `user_address` AS user_billing_address ON `user_billingprofile`.`currentAddress` = `user_address`.`addressId`
  JOIN `user_shippingprofile` ON `user_shippingprofile`.`currentAddress` = `user_address`.`addressId`
    JOIN `user_address` AS user_shipping_address ON `user_shippingprofile`.`currentAddress` = `user_address`.`addressId`

Обратите внимание на добавленное мной предложение AS. Возможно, вам также понадобится создать псевдоним столбцов (вместо SELECT * вам, вероятно, понадобится SELECT user_shipping_address.address AS user_shipping_address_value, user_billing_address.address AS user_billing_address_value ...)

Надеюсь, это поможет!

...