2010-05-07 22 views

Odpowiedz

28

Wystarczy określić, które user_id w użyciu, ponieważ zarówno stół user_info i user mieć pole o nazwie user_id:

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

SQL nie będzie tolerował tę dwuznaczność, gdyż za to, co wie , oba pola mogą reprezentować zupełnie inne dane.

+0

Ale co, jeśli obie tabele mają taką samą nazwę pola, jak "create_at" w obu tabelach? I nie podajemy tego w klauzuli where, a my chcemy pobrać pole z obu tabel z tą samą metodą user. * I user_info. * –

0

Rozwiązaniem jest wybranie każdej kolumny jawnie wszędzie. Nie używaj funkcji * USER_INFO * w liście wyboru, albo:..

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

To nie jest poprawne rozwiązanie problemu, polega tylko na wybraniu pojedynczego user_id kolumnę, aby rozwiązać niejednoznaczność. Osobiście wolę bardziej ogólne rozwiązanie określania tabeli w klauzuli WHERE, tj. "WHERE u.user_id = '$ user_id'' – defines

+0

Dzięki. Błąd typograficzny. Poprawione. –

0

Należy wspomnieć alias swojej kolumnie i przypisać do USER_ID jak

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

Spróbuj tego.

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';