Saya sangat baru ke SQL, tetapi berharap untuk beberapa input di bawah ini. Dalam tugas ini, kami tidak seharusnya menggunakan PK atau FK sehingga semuanya silang referensi. Saya memiliki tabel karyawan dengan kolom untuk ID Manajer sebagai ID karyawan, dan CityID yang direferensikan ke tabel kota yang mencakup ID dan nama.

Saya perlu menarik nama karyawan, kota karyawan, nama manajer dan manajer kota, masalah yang saya alami adalah, salah satu manajer memiliki nilai nol di kota, sehingga tidak menghasilkan semua hasil yang mungkin. Jika ada nilai nol di kolom apa pun, saya ingin menunjukkan nol.

Adakah tahu apa yang bisa saya tambahkan untuk memungkinkan nilai nol?

Ini adalah kueri sejauh ini:

Pilih CONCAT (E.Firstname, '', E.LastName) sebagai 'PEKERJAAN BEEN', C.CityName sebagai 'karyawan', concat (m.firstname, '', m.lastname) sebagai 'nama manajemen', ci.cityname sebagai ' Managerkity '

Dari karyawan E.

Bergabunglah dengan karyawan M pada E.ManagerID = M.EmployeeEd

Bergabunglah dengan city c pada e.cityid = c.cityid

Bergabunglah dengan City CI pada m.cityid = ci.cityid;

1
casscode 29 Mei 2021, 01:41

3 jawaban

Jawaban Terbaik

JOIN mengembalikan semua baris dari tabel di mana catatan utama satu tabel sama dengan catatan kunci dari tabel lain
INNER JOIN Mengembalikan hanya mencocokkan tupel / baris jika ada banyak di sebelah kanan dia membandingkan tabel.
> Sementara LEFT OUTER JOIN mengembalikan semua tupel / baris yang cocok dari kedua tabel yang dibandingkan.

Saya sarankan Anda menggunakan LEFT OUTER JOIN dalam kasus Anda.

0
kabax 28 Mei 2021, 22:54

@casscode Anda perlu menggunakan LEFT JOIN dalam kueri Anda, seperti ini:

SELECT CONCAT(e.FirstName, ' ', e.LastName) AS 'EmployeeName', 
    c.CityName AS 'EmployeeCity', 
    CONCAT(m.FirstName, ' ', m.LastName) AS 'ManagerName',   
    ci.CityName AS 'ManagerCity'
FROM EMPLOYEE e
JOIN EMPLOYEE m ON e.ManagerId = m.EmployeeId
LEFT JOIN CITY c ON e.CityId = c.CityId
LEFT JOIN CITY ci ON m.CityId = ci.CityId;
0
Gharbad The Weak 28 Mei 2021, 22:54

Dalam kasus Anda, cukup gunakan concat_ws():

SELECT CONCAT_WS(' ', e.FirstName,  e.LastName) AS EmployeeName, 
       c.CityName AS EmployeeCity,
       CONCAT_WS(' ', m.FirstName, m.LastName) AS ManagerName, 
       ci.CityName AS ManagerCity

CONCAT_WS() mengabaikan nilai NULL. Dan sebagai bonus, tidak akan termasuk ruang.

Catatan: Hanya gunakan kutipan tunggal untuk konstanta string dan tanggal. Jangan menggunakannya untuk nama kolom.

0
Gordon Linoff 28 Mei 2021, 22:54