: takma ifadenin sütun adı olarak kullanılır grup tarafından, istek üzerine veya HAVING maddelerde kullanılabilir
.
Birleştirmedeki takma ad kullanamazsınız. Sadece yukarıda listelenen yerlerde kullanabilirsiniz. Bunun nedeni, takma adın bir diğer adıyla bir alan üzerinde olmasıdır. Birleşmenin bu takma adlara tanımında izin verilmiş olsaydı, yinelemeli tanımlarla sonuçlanırdı (ya da olabilir).
sorunu çözmek için, her iki yerde de CASE
maddesini tekrar edebilir:
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
muhtemelen iki seçer olarak bu sorguyu yeniden yazmak ve UNION onları olacağını Ancak:
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);
BOMB'sın! Sadece sadece BOMB'sın! Adını değiştirmelisin. :) Teşekkürler! – DRJ
@DRJ: Rica ederim! –