سؤال

لدي 3 طاولات

[contact]
------------------
cID (PRIMARY KEY, INT) || name || lastupdate (TIMESTAMP)

[phone]
----------------------
cID (FOREIGN KEY, linked to contact.cID) || phonenumber || pID (phone number ID, since each contact can have many numbers)

[email]
------------------------
cID (FOREIGN KEY) || email

أحتاج إلى إجراء استعلام تحديد من شأنه جلب جميع أرقام التعريف الشخصية لكل جهة اتصال واسمها ورقم هاتفها إذا كان الرقم التعريفي هو 1 والبريد الإلكتروني الخاص بها جميعًا في جدول واحد.وبالتالي فإن الناتج سيبدو هكذا على سبيل المثال.

cID   |   name             |   phone1  |  email
----------------------------------------------
45    |  John Smith         |  1234567  |  john.s@test.com
46    |  Darth Vader        |  9999999  |  vader@deathstar.org
47    |  Yoda               |  1236547  |  
-----------------------------------------------------------------------------

حاولت أن أفعل ذلك مثل هذا

SELECT contact.cID, name, phone, email FROM contact, phone, email 
WHERE contact.cID = phone.cID AND contact.cID = email.cID AND phone.pID = 1;

يؤدي هذا إلى حدوث ذلك تقريبًا، ولكن إذا لم يكن لدى جهة الاتصال رقم هاتف أو بريد إلكتروني باسمها، فسيتم استبعادها.
أحتاج إلى إظهار جميع جهات الاتصال، بغض النظر عن الطقس الذي لديهم بريد إلكتروني أو رقم هاتف في قاعدة البيانات.

كيف يمكنني تحقيق ذلك؟

هل كانت مفيدة؟

المحلول

Select c.cID, C.name, P.phone As phone1, E.email
From contact As C
    Left Join phone As P
        On P.cID = C.cID
            And P.pID = 1
    Left Join email As E
        On E.cID = C.cID

باختصار، عليك أن تضع معايير لل pID = 1 في جملة ON عند الانضمام phone ل contact.بالإضافة إلى ذلك، تحتاج إلى استخدام Left Joins للتعامل مع الحالة التي لا يكون لديهم فيها هاتف أو بريد إلكتروني.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top