Saya memiliki pertanyaan berikut:

SELECT A.*, B.* FROM Employee AS A
LEFT JOIN  EmployeeHistory AS B ON +B.EmployeeId = CASE 
WHEN DeptId=1 THEN SUBSTRING(FunctionRef,2,3)
WHEN DeptId=2 THEN SUBSTRING(FunctionRef,2,2) END

Saya ingin memahami + sebelum +B.EmployeeId, karena SQL Server tidak membuat kesalahan

0
Martin James 12 Mei 2021, 17:54

3 jawaban

Jawaban Terbaik

SQL yang Anda posting tidak T-SQL yang valid. Ini karena setelah Anda mendefinisikan alias untuk Employee sebagai A Anda memiliki ON ("A" untuk Karyawan? Apa A? A untuk Apple, E adalah untuk Karyawan. Kebiasaan Buruk untuk Ditendang : Menggunakan alias tabel seperti (a, b, c) atau (t1, t2, t3)). Tabel pertama dalam FROM tidak dapat diikuti oleh ON, ON adalah untuk tabel yang Anda ikuti.

Jika pertama ON dimaksudkan sebagai JOIN, itu berfungsi: db<>biola. Tetapi semua yang + lakukan adalah menjadi operator plus atau penggabungan terkemuka (yang bergantung pada tipe data EmployeeID). SELECT +1, + ''; adalah sintaks yang benar-benar valid (meskipun aneh). + pada dasarnya tidak melakukan apa-apa.

Penafian: Paragraf pembuka didasarkan pada SQL asli yang diposting oleh OP, yang mereka nyatakan memiliki salin dan tempel dari lingkungan kerja.

2
Larnu 12 Mei 2021, 20:55

Mungkin Anda lupa menyertakan baris kedua JOIN table2 as B. Jika Anda memasukkan baris itu, kueri bisa menjadi valid.

Ekspresi +B.EmployeeId dapat berarti 0+B.EmployeeId dan dengan demikian tanda plus tidak akan berpengaruh apa pun.

2
The Impaler 12 Mei 2021, 15:07

+ adalah tanda tambah unary. Ini analog dengan minus unary (-) tetapi tidak melakukan apa-apa. Jika argumen kedua adalah string, maka itu adalah rangkaian string unary, sekali lagi tidak melakukan apa-apa.

Saya tidak yakin apa tujuannya.

Anda dapat memeriksa ini untuk mendapatkan ide:

select ++++1, + '', +'abc'
2
Gordon Linoff 12 Mei 2021, 15:04