Προς το περιεχόμενο

Πρόβλημα με MySQL query - Column '...' in field list is ambiguous


macabre_sunsets

Προτεινόμενες αναρτήσεις

Δημοσ.

Έχω το ακόλουθο query:

>SELECT 
a.name, 
b.city,
c.address,
d.friend,
country.country
FROM 
(
	user AS a 
		LEFT JOIN 
			place AS b 
				ON 
					a.city = b.city
		RIGHT JOIN
			info AS c
				ON
					a.address = c.address
		LEFT JOIN
			friends AS d
				ON
					c.fid = d.fid
		LEFT JOIN
			country 
				ON
					country.cid = c.cid
) 
WHERE 
a.id 
	LIKE '$id' 
ORDER BY 
a.name

 

Όταν το εκτελώ στο phpmyadmin, μου επιστρέφει: #1052 - Column 'state' in field list is ambiguous

 

Η στήλη state υπάρχει σε δυο πίνακες οπότε εν μέρη λογικό το σφάλμα. Ψάχνωντας για πιθανές λύσεις, αρκετοί προτείνουν την χρήση alias για τα tables. Στην περίπτωσή μου όμως, κάθε table έχει το δικό του alias, εκτός από το table country. Πώς γίνεται να μπερδεύει ακόμα η MySQL τις στήλες από τα διαφορετικά tables; Έχω ξεχάσει κάτι; Είναι γενικά λάθος το query; Έχω δοκιμάσει να βάλω alias και στο table country αλλά το σφάλμα δεν σταμάτησε να εμφανίζεται.

 

Σημείωση: Πιθανώς δεν θα βγάλετε νόημα από το query με τα ονόματα των στηλών που έχω χρησιμοποιήσει, αλλά αυτά νομίζω πως δεν έχουν ιδιαίτερη σημασία. Επίσης, δυστυχώς δεν μπορώ να αναδιοργανώσω τα tables κάτι που ίσως έλυνε το πρόβλημά μου.

Δημοσ.

Κανονικά δεν έπρεπε να χτύπαγε αυτό το λάθος γιατί δεν κάνεις select το state.

 

Ίσως το θέμα να είναι στα joins.

Δημοσ.

Γενικα, όταν χτίζω την βάση μου πάντα την δημιουργώ ως εξής:

Έστω ότι θα φτιάξω τον πίνακα users τότε τα πεδία θα είναι τα use_id, use_name, use_surname , ...

 

Δηλαδή παίρνω τα 3 πρώτα γράμματα από το όνομα του πίνακα μου

 

Στο πρόβλημα σου τώρα, διάβαζα κάπου ότι πρέπει ένας από τους 2 πίνακες να είναι alias

Δημοσ.

Εάν ήταν στο χέρι μου να δημιουργήσω την βάση από την αρχή θα έλυνα εύκολα το πρόβλημα. Δυστυχώς όμως η βάση είναι δεδομένη και δεν μπορώ να την αλλάξω κατά βούληση (βασικά είναι Access που έχει μετατραπεί σε SQL με ό,τι αυτό συνεπάγεται).

 

Χμ, νομίζω βρήκα τι φταίει. Υπάρχει το πεδίο "state" και το "one-state". Είναι μη έγκυρο όνομα αυτό με την παύλα; Παρατήρησα πως όταν το γράφω έτσι (με την παύλα) τότε βγάζει το σφάλμα. Εάν το γράψω χωρίς την παύλα τότε δεν βγάζει σφάλμα. Το θέμα είναι πως ο πίνακας έχει μια στήλη "one-state" και μια "state", ενώ ο άλλος πίνακας έχει μια στήλη ονόματι "state". Καμια ιδέα;

Να σημειώσω πως χρειάζομαι και τα δυο πεδία, οπότε αναγκαστικά μπαίνουν στο SELECT κάπως έτσι: "c.one-state, c.state".

 

Ελπίζω να μην σας έχω μπερδέψει πολύ :/

Δημοσ.

Μου φαίνεται αν βάλεις την - πρέπει να το βάλεις έτσι : [dbo].[table].[One-State], με τις αγκύλες.

Δημοσ.

Δοκίμασα και με αγκύλες αλλά τίποτα. Τελλικά φαίνεται πως λύθηκε χρησιμοποιώντας `` (c.state, c.`one-state`).

 

Ευχαριστώ για τις απαντήσεις και την βοήθειά σας.

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...