2013-04-12 7 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

मुझे यकीन है कि नहीं कर रहा हूँ अगर आप समझ विदेशी चाबी के लिए उपयोग किया जाता है -

+0

हाय tombom है। भ्रामक परिचय के लिए खेद है। मैंने पाठ और तालिका में कुछ संशोधन किए हैं। मुझे विदेशी कुंजी का बिंदु मिल रहा है और 'हां' आपके अंतिम प्रश्न के उत्तर हैं। जो मैं खो रहा था वह जॉइन चीज थी। अब बात मेरे लिए बहुत स्पष्ट है। बहुत धन्यवाद। – Alordiel

2

उपयोग शामिल हों:

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

का विस्तार करने के लिए: vehicles INNER JOIN users केवल कारों है मालिकों वापस आ जाएगी। यदि आप उन कारों को प्रदर्शित करना चाहते हैं जिनके पास मालिक, या हटाए गए मालिक के लिए NULL है, तो vehicles LEFT JOIN users का उपयोग करें।

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

बाद के दो तालिकाओं के कार्तीय उत्पाद से हालत मिलान पंक्तियों का चयन करता है:

vehicles INNER JOIN users के लिए वहाँ भी एक अलग तरह से संभव है। ,

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

आप, एसक्यूएल शामिल हों जरूरत है कुछ इस तरह। एक विदेशी कुंजी मूल रूप से कहती है "इस प्रविष्टि के लिए मूल तालिका में एक प्रविष्टि होना चाहिए"। आपने कहा 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 स्तंभ में किसी मौजूदा प्रविष्टि होना चाहिए:

तो, मान लेते हैं तो आप इस तरह एक तालिका परिभाषा डालते हैं।

व्यावसायिक नियमों को लागू करने के लिए विदेशी कुंजी हैं। क्या हर उपयोगकर्ता को कार मालिक होना जरूरी है? या दूसरी तरफ, क्या हर कार को किसी के स्वामित्व में होना चाहिए? यदि आप दोनों प्रश्नों के उत्तर के साथ उत्तर दे सकते हैं, तो इस मामले के लिए किसी भी विदेशी कुंजी को लागू न करें। लेकिन ऐसा करें, अगर आप निश्चित रूप से हाँ का उत्तर दे सकते हैं।

जानकारी आप देख रहे हैं प्राप्त करने के लिए बस

SELECT 
* 
FROM 
vehicles 
INNER JOIN users ON vehicles.car_owner = users.user_id 
संबंधित मुद्दे