Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

MySQL:Sử dụng giá trị CASE / ELSE làm tham số tham gia

Từ tài liệu về bí danh:

Bạn không thể sử dụng bí danh khi tham gia. Bạn chỉ có thể sử dụng nó ở những nơi được liệt kê ở trên. Lý do là bí danh nằm trên một trường trong kết quả của phép nối. Nếu phép nối được cho phép với các bí danh này trong định nghĩa của nó, nó sẽ (hoặc có thể) dẫn đến các định nghĩa đệ quy.

Để giải quyết vấn đề của bạn, bạn có thể lặp lại CASE mệnh đề ở cả hai nơi:

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

Tuy nhiên, tôi có thể sẽ viết lại truy vấn này dưới dạng hai lựa chọn và LIÊN KẾT chúng:

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

Kết quả:

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

Dữ liệu thử nghiệm:

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. Làm cách nào để chuyển từ máy chủ MySql sang ứng dụng Android?

  2. Tại sao MySQL trả về cùng một kết quả trong khi sử dụng RAND () trong câu lệnh SELECT?

  3. Làm thế nào để tạo cơ sở dữ liệu từ lệnh shell?

  4. 60 triệu mục nhập, chọn mục nhập từ một tháng nhất định. Làm thế nào để tối ưu hóa cơ sở dữ liệu?

  5. MySQL NOT IN truy vấn