Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

मूल MySQL प्रश्न

आप क्वेरी को http://sqlfiddle.com/#!9/839d2/1 पर आज़मा सकते हैं

प्रश्न 1

उन सभी ग्रहों की सूची जिनके कप्तान हैं। यह id_planet, Planet_name, उनमें से प्रत्येक ग्रह पर कुल कप्तानों के साथ-साथ वहां हुई लड़ाइयों (यदि कोई हो) की संख्या दिखाता है।

SELECT DISTINCT aa.id_planet, aa.planet_name, _aa.captains_count, _bb.battles_count
FROM planet AS aa
INNER JOIN soldier AS bb
ON aa.id_planet = bb.planet_id
INNER JOIN (
    SELECT planet_id, COUNT(*) AS captains_count
    FROM soldier
    WHERE rank = 'captain'
    GROUP BY planet_id
) AS _aa
ON aa.id_planet = _aa.planet_id
LEFT JOIN (
    SELECT id_planet_battle, COUNT(*) AS battles_count
    FROM battle
    GROUP BY id_planet_battle
) AS _bb
ON aa.id_planet = _bb.id_planet_battle
WHERE bb.rank = 'captain';

इसका उपयोग करके आप समान परिणाम प्राप्त कर सकते हैं:

SELECT DISTINCT aa.id_planet, aa.planet_name,
(
    SELECT COUNT(*)
    FROM soldier AS _aa
    WHERE _aa.rank = 'captain' AND aa.id_planet = _aa.planet_id
    GROUP BY _aa.planet_id
) AS captains_count,
(
    SELECT COUNT(*)
    FROM battle AS _bb
    WHERE aa.id_planet = _bb.id_planet_battle
    GROUP BY _bb.id_planet_battle 
) AS battles_count
FROM planet AS aa
INNER JOIN soldier AS bb
ON aa.id_planet = bb.planet_id
WHERE bb.rank = 'captain';

प्रश्न 3

SELECT aa.name, aa.rank, bb.planet_name AS planet_from, (
    SELECT COUNT(*) 
    FROM soldier AS _aa 
    WHERE _aa.planet_id = aa.planet_id
) AS number_of_soldiers, 
(
    SELECT COUNT(*)
    FROM battle AS _bb
    WHERE _bb.id_planet_battle = aa.planet_id
) AS number_of_battles
FROM soldier AS aa
INNER JOIN planet AS bb
ON aa.planet_id = bb.id_planet;

यहां, मैंने जॉइन का उपयोग number_of_soldiers और number_of_battles की गणना करने के लिए नहीं किया जैसा कि मैंने क्वेरी 1.1 में किया था क्योंकि यह एक सहसंबद्ध सबक्वायरी होगी और इस तरह बाहरी प्रश्नों तक इसकी पहुंच नहीं हो सकती थी (https://dev.mysql.com/doc/refman/5.5/en/from-clause -subqueries.html )।

गलत क्वेरी:

SELECT DISTINCT aa.id_planet, aa.planet_name, _aa.captains_count, _bb.battles_count
FROM planet AS aa
INNER JOIN soldier AS bb
ON aa.id_planet = bb.planet_id
INNER JOIN (
    SELECT COUNT(*) AS captains_count
    FROM soldier AS _aa
    WHERE _aa.rank = 'captain' AND aa.id_planet = _aa.planet_id
    GROUP BY _aa.planet_id
) AS _aa
ON aa.id_planet = _aa.planet_id
LEFT JOIN (
    SELECT COUNT(*) AS battles_count
    FROM battle AS _bb
    WHERE aa.id_planet = _bb.id_planet_battle
    GROUP BY _bb.id_planet_battle 
) AS _bb
ON aa.id_planet = _bb.id_planet_battle
WHERE bb.rank = 'captain';

तो उपरोक्त क्वेरी गलत है और त्रुटि उत्पन्न करती है:अज्ञात कॉलम 'aa.id_planet' 'कहां क्लॉज' में।

जहाँ तक आपके द्वारा पूछे गए दूसरे प्रश्न का सवाल है, मुझे आशा है कि कोई और इसे आज़मा सकता है।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. पीडीओ बाइंड_परम अपरिभाषित विधि है

  2. MySQL में संख्याओं को मुद्रा के रूप में कैसे प्रारूपित करें

  3. वीपीएन विकल्प के रूप में एसएसएच टनलिंग का उपयोग करना

  4. डेटाबेस में सभी तालिकाओं को एक संयोजन में कैसे परिवर्तित करें?

  5. हाइबरनेट बैच इंसर्ट कैसे काम करता है?