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!.

È stato utile?

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!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top