Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

LEFT JOIN tidak berperilaku seperti yang diharapkan karena memberikan NULL di MySQL

Saya kira alasannya tidak sesuai dengan yang Anda pikirkan adalah karena @row_number tidak menyetel ulang ke 1 untuk setiap subkueri.

Saya mengujinya, hanya menggabungkan dua yang pertama (Profesor dan Dokter), tetapi menggunakan CROSS JOIN, jadi saya bisa melihat semua nilai row_number.

+------------+--------+------------+----------+
| row_number | name   | row_number | name     |
+------------+--------+------------+----------+
|          8 | Aamina |          1 | Ashley   |
|          8 | Aamina |          2 | Belvet   |
|          8 | Aamina |          3 | Britney  |
|          8 | Aamina |          4 | Maria    |
|          8 | Aamina |          5 | Meera    |
|          8 | Aamina |          6 | Naomi    |
|          8 | Aamina |          7 | Priyanka |
|          9 | Julia  |          1 | Ashley   |
|          9 | Julia  |          2 | Belvet   |
|          9 | Julia  |          3 | Britney  |
|          9 | Julia  |          4 | Maria    |
|          9 | Julia  |          5 | Meera    |
|          9 | Julia  |          6 | Naomi    |
|          9 | Julia  |          7 | Priyanka |
|         10 | Priya  |          1 | Ashley   |
|         10 | Priya  |          2 | Belvet   |
|         10 | Priya  |          3 | Britney  |
|         10 | Priya  |          4 | Maria    |
|         10 | Priya  |          5 | Meera    |
|         10 | Priya  |          6 | Naomi    |
|         10 | Priya  |          7 | Priyanka |
+------------+--------+------------+----------+

Anda dapat melihat bahwa tampaknya nomor baris bertambah secara progresif, dan nilai awal 1 di kedua subkueri telah selesai pada saat baris diberi nomor.

Anda mungkin dapat memperbaikinya dengan menggunakan variabel pengguna yang berbeda di setiap subkueri.

Namun kueri ini tidak akan berfungsi seperti yang Anda inginkan, misalnya jika Anda memiliki lebih sedikit Profesor daripada anggota profesi lain.

Sejujurnya, saya tidak akan melakukan pemformatan kolom semacam ini dalam SQL. Cukup lakukan empat kueri independen, ambil semua hasil ke dalam aplikasi Anda, dan format ke dalam kolom saat Anda mengeluarkannya. Akan jauh lebih sederhana seperti itu, dan kode sederhana lebih mudah ditulis, lebih mudah di-debug, lebih mudah dirawat.

Kembali komentar Anda:

Cukup adil, melakukan ini sebagai tantangan pengkodean tidak masalah, selama Anda (dan pembaca lain) tahu bahwa dalam proyek nyata, melakukan SQL yang terlalu pintar tidak selalu merupakan ide terbaik.

Karena Anda melakukan tantangan pengkodean, Anda harus menyelesaikannya sendiri, jadi saya tidak bisa memberikan solusi yang menghasilkan output di bawah ini. Tetapi ini adalah bukti bahwa itu mungkin (saya berjanji saya tidak mengolok-olok output, saya benar-benar menyalin &menempelkannya dari jendela terminal saya). Semoga berhasil!

+------------+-----------+--------+-----------+----------+
| row_number | Professor | Doctor | Singer    | Actor    |
+------------+-----------+--------+-----------+----------+
|          1 | Ashley    | Aamina | Christeen | Eve      |
|          2 | Belvet    | Julia  | Jane      | Jennifer |
|          3 | Britney   | Priya  | Jenny     | Ketty    |
|          4 | Maria     | NULL   | Kristeen  | Samantha |
|          5 | Meera     | NULL   | NULL      | NULL     |
|          6 | Naomi     | NULL   | NULL      | NULL     |
|          7 | Priyanka  | NULL   | NULL      | NULL     |
+------------+-----------+--------+-----------+----------+



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Menambahkan hanya satu nilai ke tabel di sql

  2. PHP MySQL mengatur Batas Waktu Koneksi

  3. Baca/Tulis split menggunakan Zend_Db

  4. Setiap hari kerja tertentu, sql dan php

  5. Tambahkan kolom di MySQL