2010-05-03 8 views
11

में शामिल होने के रूप में CASE/ELSE मान का उपयोग करें, मैं भुगतानकर्ता या प्राप्तकर्ता कौन है, इस आधार पर मैं USERS तालिका से URL और फ़ोटो में ट्रांज़ेक्शन तालिका में शामिल होने का प्रयास कर रहा हूं। यह कहता रहता है कि मुझे तालिका नहीं मिली this - मैं क्या गलत कर रहा हूं?MySQL: पैरामीटर

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 

उत्तर

15
उपनाम documentation के बारे में से

:

उर्फ ​​अभिव्यक्ति के स्तंभ नाम के रूप में प्रयोग किया जाता है और ग्रुप द्वारा आदेश देकर या होने खंड में इस्तेमाल किया जा सकता है।

आप शामिल होने में उपनाम का उपयोग नहीं कर सकते हैं। आप इसे ऊपर सूचीबद्ध स्थानों में ही उपयोग कर सकते हैं। कारण यह है कि उपनाम शामिल होने के परिणामस्वरूप एक क्षेत्र में है। यदि इन उपनामों को अपनी परिभाषा में शामिल करने की इजाजत दी गई थी तो यह परिणाम (या हो सकता है) परिणामस्वरूप रिकर्सिव परिभाषाओं में होगा।

अपनी समस्या को हल करने के लिए आप दोनों स्थानों में 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); 
+4

आप बीओएमबी हैं! आप बस बस बॉम्बे हैं! आपको अपना नाम बदलना चाहिए। :) धन्यवाद! – DRJ

+1

@DRJ: आपका स्वागत है! –