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

MySQL:Gunakan nilai CASE/ELSE sebagai parameter gabungan

Dari dokumentasi tentang alias:

Anda tidak dapat menggunakan alias dalam bergabung. Anda hanya dapat menggunakannya di tempat-tempat yang tercantum di atas. Pasalnya, alias tersebut berada pada sebuah field hasil join. Jika gabungan diizinkan ke alias ini dalam definisinya, itu akan (atau bisa) menghasilkan definisi rekursif.

Untuk mengatasi masalah Anda, Anda dapat mengulangi CASE klausa di kedua tempat:

SELECT `name`,`photo`,`amount`,`comment`,
(
    CASE `payer_id`
    WHEN 72823 THEN `payee_id`
    ELSE `payer_id`
    END
) AS `this`
FROM `transactions`
RIGHT JOIN `users` ON `users`.`id`= (
    CASE `payer_id`
    WHEN 72823 THEN `payee_id`
    ELSE `payer_id`
    END
)
WHERE `payee_id`=72823 OR `payer_id`=72823

Namun saya mungkin akan menulis ulang kueri ini sebagai dua pilihan dan Gabungkan mereka:

SELECT name, photo, amount, comment, payer_id AS this
FROM transactions
JOIN users ON users.id = payer_id
WHERE payee_id = 72823
UNION ALL
SELECT name, photo, amount, comment, payee_id AS this
FROM transactions
JOIN users ON users.id = payee_id
WHERE payer_id = 72823

Hasil:

'name3', 'photo3', 30, 'comment3', 3
'name1', 'photo1', 10, 'comment1', 1
'name2', 'photo2', 20, 'comment2', 2

Data pengujian:

CREATE TABLE users (id INT NOT NULL, name NVARCHAR(100) NOT NULL, photo NVARCHAR(100) NOT NULL);
INSERT INTO users (id, name, photo) VALUES
(1, 'name1', 'photo1'),
(2, 'name2', 'photo2'),
(3, 'name3', 'photo3'),
(4, 'name4', 'photo4');

CREATE TABLE transactions (amount INT NOT NULL, comment NVARCHAR(100) NOT NULL, payer_id INT NOT NULL, payee_id INT NOT NULL);
INSERT INTO transactions (amount, comment, payer_id, payee_id) VALUES
(10, 'comment1', 72823, 1),
(20, 'comment2', 72823, 2),
(30, 'comment3', 3, 72823),
(40, 'comment4', 4, 5);



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pencarian teks lengkap MySQL di beberapa tabel

  2. Ubah BufferedInputStream menjadi gambar

  3. Cara membuat sinonim di mysql

  4. Apa yang menyebabkan kesalahan PDO Tidak dapat menjalankan kueri saat kueri tanpa buffer lainnya aktif?

  5. Pindahkan tabel dari satu database ke database lain di MySQL