2013-04-12 29 views
6

我的問題很基本。 這是關於如何使用外鍵來從兩個表中選擇某些信息來構建我的查詢?如何從兩張表查詢時使用外鍵

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_idvehicle.car_owner表的外鍵和users表的主鍵。

所以有人正在尋找所有的大衆汽車,我想要填充下面的信息爲HTML(是的,我知道這不是正確的方式 - 我用這只是爲了簡化示例,並顯示哪些信息來自每張表):

> echo "Car model:". `vehicles.car_model` 
> echo "Car owner:". `users.user_name` 
> echo "Contacts: ". `users.user_phone` 

在此先感謝。

回答

10

我不知道,如果你瞭解使用什麼外鍵。外鍵基本上說「對於這個條目,父表中必須有一個條目」。你說user_id is foreign key in vehicle table,這對我來說不太清楚。

所以,讓我們假設你有一個這樣的表定義:

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

當你想添加一個新用戶到表中,USER_ID必須在車表中car_owner列中的現有條目。

外鍵用於實現業務規則。每個用戶都必須成爲車主嗎?或者相反,每輛車都必須由某人擁有?如果你可以用no回答這兩個問題,那麼不要爲這種情況實現任何外鍵。但是,如果你肯定回答肯定,那就這樣做。

要得到你正在尋找的信息,只是做

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

嗨tombom。對於誤導性介紹抱歉。我在文本和表格中做了一些修改。我明白了外鍵,'是'是你最後一個問題的答案。我錯過的是JOIN的東西。現在事情對我來說更加清楚了。非常感謝。 – Alordiel

2

使用JOIN:

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

要展開:vehicles INNER JOIN users將只返回的汽車,所有者。如果要顯示車主擁有NULL或車主已刪除的車輛,請使用vehicles LEFT JOIN users

對於vehicles INNER JOIN users也有一個不同的可能的方式:

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

後者選擇行匹配來自這兩個表的笛卡兒積的條件。

2

你需要SQL加入,這樣的事情 -

SELECT vehicles.car_model, users.user_name, users.user_phone 
FROM vehicles 
JOIN users ON vehicles.car_owner = users.users_id