Parametreyi katılmak kullanın CASE / ELSE değeri olarak: MySQL

1 Cevap php

Ben KULLANICILARI tablodan mükellefi veya alacaklı kim dayalı İŞLEMLERİ tabloya adını ve fotoğrafını katılmaya çalışıyorum. Ben ne yapıyorum yanlış - Bu tabloyu bulamıyorum this bana söyleyip duruyor?

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`=`this`)
WHERE `payee_id`=72823 OR `payer_id`=72823

1 Cevap

documentation adlar hakkında Gönderen:

Ad ifadenin sütun adı olarak kullanılır ve GROUP BY, ORDER BY veya HAVING yan tümceleri kullanılabilir.

Bir birleştirme bir takma ad kullanamazsınız. Sadece yukarıda listelenen yerlerde kullanabilirsiniz. Nedeni takma birleştirme sonucunda bir alanda olmasıdır. Katılmak tanımı bu takma adlarına izin verildi Eğer (ya da olabilir) özyinelemeli tanımlarında neden olacaktır.

Sorunu çözmek için her iki yerde CASE maddesini tekrar olabilir:

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

Ancak ben muhtemelen iki seçer ve onları BİRLİĞİ olarak, bu sorguyu yeniden olacaktır:

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

Sonuç:

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

Test verileri:

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);