मैं दो तालिकाओंयोग और भीतरी करें में शामिल होने
Bills
है:id amount reference
Transactions
:id reference amount
निम्नलिखित SQL क्वेरी
SELECT
*,
(SELECT SUM(amount)
FROM transactions
WHERE transactions.reference = bils.reference) AS paid
FROM bills
GROUP BY id HAVING paid<amount
तालिका Bills
से कुछ पंक्तियों के लिए था, संबंधित लेनदेन की राशि के साथ एक कॉलम paid
जोड़ना।
हालांकि, यह केवल तभी काम करता है जब प्रत्येक बिल के लिए कम से कम एक लेनदेन होता है। अन्यथा, एक लेनदेन के लिए कोई लाइन-कम बिल वापस नहीं किया जाता है।
शायद, ऐसा इसलिए है क्योंकि मुझे आंतरिक शामिल होना चाहिए था!
तो मैं निम्न प्रयास करें:
SELECT
*,
(SELECT SUM(transactions.amount)
FROM transactions
INNER JOIN bills ON transactions.reference = bills.reference) AS paid
FROM bills
GROUP BY id
HAVING paid < amount
बहरहाल, यह सभी पंक्तियों के लिए भुगतान की एक ही मान देता है! मैं क्या गलत कर रहा हूं ?
लेकिन 'बिल 'में कोई" भुगतान "कॉलम नहीं है, इसे लेनदेन की राशि के रूप में परिभाषित किया जाना है।अगर मैं इसे सही करने के लिए इसे संशोधित करने का प्रयास करता हूं, तो मुझे अभी भी कम से कम एक लेनदेन के साथ केवल 'बिल' पंक्ति मिलती है। – Klaus
@ क्लोस: मैं देखता हूं, यही वह जगह है जहां से आप इसे प्राप्त कर चुके हैं ... कोई लेनदेन नहीं होने पर योग शून्य हो जाएगा, इसलिए आपको इसे संभालना होगा। उपरोक्त कोड देखें। – Guffa
बहुत बहुत धन्यवाद, 'ifnull' ('isnull' नहीं) और बाएं शामिल होने से चाल चल रही है! – Klaus