2010-05-07 8 views
11

Wie kann ich das Problem beheben, das ich aus dem folgenden Code erhalten, der 'user_id' in where clause is ambiguous. Danke für die Hilfe im Voraus.MySQL 'user_id' in Where-Klausel ist mehrdeutiges Problem

Hier ist die MySQL-Tabelle.

SELECT user.*, user_info.* 
FROM user 
INNER JOIN user_info ON user.user_id = user_info.user_id 
WHERE user_id='$user_id' 

Antwort

28

Sie müssen einfach festlegen, welche user_id, zu verwenden, da sowohl die user_info und user Tabelle ein Feld user_id genannt haben:

... WHERE user.user_id='$user_id' 

SQL tolerieren würde nicht diese Mehrdeutigkeit, da für das, was er weiß, Beide Felder können völlig unterschiedliche Daten darstellen.

+0

Aber was, wenn beide Tabellen denselben Feldnamen wie 'create_at' in beiden Tabellen haben? Und wir spezifizieren es nicht in where-Klausel und wollen das Feld aus beiden Tabellen mit der gleichen Methode user. * Und user_info holen. * –

0

Die Lösung besteht darin, jede Spalte explizit überall auszuwählen. Nicht Benutzer * und user_info * in Ihrer Auswahlliste, entweder:..

SELECT u.user_id, u.user_fudge, ui.foo, ui.bar 
FROM user u 
INNER JOIN user_info ui 
    ON ui.user_id = u.user_id 
WHERE u.user_id = '$user_id'; 
+1

Dies ist nicht wirklich eine korrekte Lösung für das Problem, es beruht nur auf der Auswahl einer einzigen user_id Spalte, um die Mehrdeutigkeit aufzulösen. Ich persönlich bevorzuge die allgemeinere Lösung der Angabe der Tabelle in der WHERE-Klausel, d. H. 'WHERE u.user_id = '$ user_id'' – defines

+0

Danke. Rechtschreibfehler. Korrigiert. –

0

Sie sollten Erwähnung Alias-Namen Ihrer Spalte sein und weisen wie

SELECT user.*, user_info.* 
FROM user as u 
INNER JOIN user_info as ui ON u.user_id = ui.user_id 
WHERE u.user_id='$user_id' 
0

dieses Versuchen Sie user_id.

SELECT u.user_id, u.user_fudge, ui.foo, ui.bar 
FROM user AS u 
INNER JOIN user_info AS ui 
    ON ui.user_id = u.user_id 
WHERE u.user_id = '$user_id';