Aiuto con la sintassi MySQL Query: ERRORE # 1066 - Non unico tavolo / alias
-
30-09-2019 - |
Domanda
ho quattro tavoli, user
, user_billingprofile
, user_shippingprofile
e user_address
.
utente: userId, DateCreated
user_billingprofile: userId, indirizzo
user_shippingprofile: userId, indirizzo
user_address: casuale indirizzo merda
Questa è la domanda che ho per ottenere un utente di fatturazione e spedizione profili in un solo colpo.
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`
ottengo l'errore: #1066 - Not unique table/alias: 'user_address'
.
C'è un modo per prendere un semplice join dove un tavolo si accede due volte nella stessa query, e separare i due risultati? Preferibilmente con una sorta di tabella di prefisso ...
Sono un po 'perso qui. So che potrei farlo in due query sepparate abbastanza facilmente, ma mi piacerebbe imparare a fare cose come questa in un solo colpo.
Qualsiasi aiuto / suggerimenti / direzione è molto apprezzato, grazie!.
Soluzione
Puoi pubblicare la struttura delle tabelle? Sulla base della sua domanda direi che è necessario considerare cambiarla un po '.
Detto questo si può risolvere la query corrente con l'aggiunta di un alias di tabella in questo modo:
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`
Si noti la clausola di AS
ho aggiunto. Avrete probabilmente bisogno di alias le colonne troppo (invece di SELECT *
probabilmente avrà bisogno SELECT user_shipping_address.address AS user_shipping_address_value, user_billing_address.address AS user_billing_address_value ...
)
Speranza che aiuta!