2010-04-08 21 views
9

UPDATED:एसक्यूएल: तालिका के साथ एक दृश्य में कैसे शामिल हों?

मैं MySQL बयान उपयोग कर रहा हूँ एक दृश्य बनाने के लिए:

मैं संपादकों प्रथम नाम, अंतिम नाम और शहर में यदि वे 50 से अधिक किताबें भेज दिया दिखाने की जरूरत है। मेरे पास तीन टेबल हैं:

create table editors (
ed_id char(11), 
ed_lname varchar(20), 
    ed_fname varchar(20), 
    ed_pos varchar(12), 
    phone varchar(10), 
    address varchar(30), 
    city varchar(20), 
    state char(2), 
    zip char(5), 
    ed_boss char(11)); 

create table titleditors (
ed_id char(11), 
title_id char(6), 
ed_ord integer); 

create table salesdetails (
sonum integer, 
qty_ordered integer, 
qty_shipped integer, 
title_id char(6), 
date_shipped date); 

क्या कोई मुझे बता सकता है कि इस परिणाम को बनाने के लिए कौन सा कोड होगा? मैं टेबल नहीं किया, मैं सिर्फ मैं क्या दिया गया था के साथ काम करना है।

+0

कौन सा आरडीबीएमएस इंजन आप प्रयोग करते हैं? – Quassnoi

उत्तर

18

प्राचीन वाक्य रचना (ध्यान दें की स्थिति और फिल्टर की स्थिति में शामिल होने की intermixing):

CREATE VIEW qtyorderedview AS 
    SELECT 
    salesdetails.title_id, salesdetails.qty_shipped, 
    editors.ed_id, editors.ed_lname, editors.ed_fname, editors.city 
    FROM 
    titleditors, salesdetails, editors 
    WHERE 
    titleditors.title_id = salesdetails.title_id 
    AND editors.ed_id = titleditors.ed_id 
    AND salesdetails.qty_ordered > 50 

आधुनिक वाक्य रचना (में शामिल होने की स्थिति और फिल्टर की स्थिति अलग हैं):

CREATE VIEW qtyorderedview AS 
    SELECT 
    salesdetails.title_id, salesdetails.qty_shipped, 
    editors.ed_id, editors.ed_lname, editors.ed_fname, editors.city 
    FROM 
    titleditors 
    INNER JOIN salesdetails ON titleditors.title_id = salesdetails.title_id 
    INNER JOIN editors  ON editors.ed_id = titleditors.ed_id 
    WHERE 
    salesdetails.qty_ordered > 50 

विचारों के खिलाफ शामिल वास्तव में की तरह काम टेबल के खिलाफ जुड़ता है। नियमित तालिका नाम के स्थान पर बस दृश्य नाम का उपयोग करें।

+0

मैं एक डीबी 2 डेटाबेस का उपयोग कर रहा हूँ। आपके द्वारा प्रदान किया गया वाक्यविन्यास ऐसा लगता है कि इसे पूरी तरह से काम करना चाहिए, लेकिन मुझे त्रुटियां मिल रही हैं। शायद मेरा डीबी 2 डेटाबेस भद्दा है। –

+0

संपादित करें * धन्यवाद। यह सोच रहा था कि आपने इसे कैसे चेक किया है। +1 –

+0

@gamerzfuse: आपको क्या सटीक त्रुटि मिलती है? – Tomalak

5
SELECT e.* 
FROM (
     SELECT DISTINCT te.ed_id 
     FROM (
       SELECT title_id 
       FROM sales_details 
       GROUP BY 
         title_id 
       HAVING SUM(qty_shipped) > 50 
       ) t 
     JOIN titleditors te 
     ON  te.title_id = t.title_id 
     ) te 
JOIN editors e 
ON  e.ed_id = te.ed_id 
+0

मुझे लगता है कि अपने ग्रुपिंग दृष्टिकोण मेरे फ्लैट में शामिल होने से बेहतर है, लेकिन मेरे लिए सवाल काफी स्पष्ट निश्चित रूप से जानना नहीं है। – Tomalak

+0

मुझे लगता है कि यह सही समाधान है। हालांकि, मुझे यकीन नहीं है कि मानदंड वास्तव में क्या है। क्या यह प्रति शीर्षक 50 से अधिक किताबें या प्रति संपादक 50 से अधिक किताबें हैं? हालांकि, दोनों को क्लॉज की आवश्यकता होती है। –

संबंधित मुद्दे