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 तालिका में पंक्तियों की मूल आईडी कैसे प्राप्त कर सकता हूं?

  2. कई कॉलम में MySQL COUNT ()

  3. स्विफ्ट httppost डेटा MySQL डेटाबेस में नहीं डाला जा रहा है

  4. MySQL पर स्टोरेज इंजन टाइप कैसे बदलें?

  5. अभी सेट करें () डेटाटाइम डेटाटाइप के लिए डिफ़ॉल्ट मान के रूप में?