2013-04-12 16 views
6

Moje pytanie jest dość proste. Chodzi o to, jak mogę zbudować moje zapytanie za pomocą klucza obcego, aby wybrać pewne informacje z dwóch tabel?Jak używać klucza obcego podczas odpytywania z dwóch tabel

table vehicles 
+-------+----------+------------+ 
| id_car| car_model| car_owner | 
+-------+----------+------------+ 
| 1 |  VW |   132| 
+-------+----------+------------+ 
| 2 |  VW |   200| 
+-------+----------+------------+ 
table users 
+-------+----------+------------+ 
|user_id| user_name| user_phone | 
+-------+----------+------------+ 
| 132 |  Peter| 555-555 | 
+-------+----------+------------+ 
| 200 |  Jim | 555-333 | 
+-------+----------+------------+ 

user_id jest klucz obcy w tabeli vehicle.car_owner i klucz podstawowy dla users tabeli.

Ktoś szuka wszystkich samochodów VW i chcę mieć jako wypełnienie następujące informacje: html (tak, wiem, że to nie jest poprawna metoda - używam tego, aby uprościć przykład i pokazać, które informacje z każdy stół przechodzi):

z góry dzięki.

Odpowiedz

10

Nie jestem pewien, czy zrozumiałeś co kluczy obcych służą. Klucz obcy zasadniczo mówi "dla tego wpisu musi być wpis w tabeli nadrzędnej". Powiedziałeś user_id is foreign key in vehicle table, co nie jest dla mnie jasne.

Więc załóżmy, że masz definicję tabeli tak:

CREATE TABLE vehicles 
(`id_car` int, `car_model` varchar(2), `car_owner` int); 


CREATE TABLE users 
(`user_id` int, `user_name` varchar(5), `user_phone` varchar(7) 
, CONSTRAINT `fk_your_foreign_key` FOREIGN KEY (user_id) REFERENCES vehicles(car_owner) 
); 

Gdy chcesz wstawić nowego użytkownika w tabeli, user_id musi być istniejący wpis w kolumnie car_owner w pojazdach tabeli.

Klucze zagraniczne służą do implementacji reguł biznesowych. Czy każdy użytkownik musi być właścicielem samochodu? Czy odwrotnie, czy każdy samochód musi być własnością kogoś? Jeśli możesz odpowiedzieć na oba pytania, nie, nie zaimplementuj żadnych obcych kluczy dla tego przypadku. Ale zrób to, jeśli możesz odpowiedzieć tak na pewno.

Aby uzyskać informacje szukasz po prostu zrobić

SELECT 
* 
FROM 
vehicles 
INNER JOIN users ON vehicles.car_owner = users.user_id 
+0

Hi tombom. Przepraszamy za wprowadzające w błąd wprowadzenie. Dokonałem pewnych poprawek w tekście i w tabeli. Dostaję punkt zagranicznych kluczy i "tak" są odpowiedziami na twoje ostatnie pytanie. To czego mi brakowało to rzecz JOIN. Teraz sprawy są dla mnie bardziej zrozumiałe. Bardzo dziękuję. – Alordiel

2

Zastosowanie DOŁĄCZ:

SELECT * FROM vehicles INNER JOIN users ON (vehicles.car_owner=users.user_id) 

Aby rozwinąć: vehicles INNER JOIN users powróci tylko samochody, które mają właścicieli. Jeśli chcesz wyświetlać samochody, które mają wartość NULL dla właściciela lub usuniętego właściciela, użyj vehicles LEFT JOIN users.

Na vehicles INNER JOIN users jest także inny sposób możliwe:

SELECT * FROM vehicles, users WHERE vehicles.car_owner=users.user_id 

ostatnie wybiera wiersze spełniające warunek z iloczyn tych dwóch tabel.

2

Musisz SQL Join, coś takiego -

SELECT vehicles.car_model, users.user_name, users.user_phone 
FROM vehicles 
JOIN users ON vehicles.car_owner = users.users_id 
Powiązane problemy