Mysql
 sql >> база данни >  >> RDS >> Mysql

MySQL:Използвайте стойността CASE/ELSE като параметър за присъединяване

От документацията относно псевдоними:

Не можете да използвате псевдоним в присъединяване. Можете да го използвате само на изброените по-горе места. Причината е, че псевдонимът е в поле в резултата от присъединяването. Ако присъединяването беше разрешено към тези псевдоними в неговата дефиниция, това би (или би могло) да доведе до рекурсивни дефиниции.

За да разрешите проблема си, можете да повторите CASE клауза на двете места:

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

Вероятно обаче бих пренаписал тази заявка като две селектирания и да ги обединя:

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

Резултат:

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

Данни от теста:

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. Функция MySQL SIN() – Връща синуса на число в MySQL

  2. Как лесно да направите прост CRUD, използвайки PHP и MySQL

  3. SELECT, където стойността на реда съдържа низ MySQL

  4. Грешка при вмъкване на единични кавички в MySQL

  5. Как да създадете нов потребител и да предоставите разрешения в MySQL