2012-10-30 10 views
22

मैं यह शर्त लगाने के लिए तैयार हूं कि यह वास्तव में एक सरल उत्तर है क्योंकि मैं SQL के लिए नोब हूं।एकाधिक मानदंडों में शामिल होने के लिए, दोनों मानदंडों के सभी संयोजनों को वापस करने के लिए

तालिका 1 स्तंभ 1 है (मापदंड 1) स्तंभ 2 (मापदंड 2) कॉलम 3 (मीट्रिक 1)

तालिका 2 स्तंभ 1 (मापदंड 1) स्तंभ 2 (मापदंड 2) कॉलम 3 (मीट्रिक 2 विशिष्ट है table2.criteria2)

तालिका पर प्रत्येक मानदंड 1 के लिए मानदंड 2 के 1 - 5 मानों से कहीं भी हो सकता है।

जब मैं बयान यहाँ में शामिल होने का उपयोग (यह मानते हुए मैं यह करने के लिए एक पूर्व के रूप में तालिका 1 की पहचान):

Select WeddingTable, TableSeat, TableSeatID, Name, Two.Meal 
FROM table1 as One 
inner join table2 as Two 
on One.WeddingTable = Two.WeddingTable and One.TableSeat = Two.TableSeat 

मैं केवल मापदंड 1/मानदंडों में से एक मिल 2 संयोजन भी जब मैं एक तथ्य के लिए पता कि 3 या 4 हैं। मैं सभी संयोजन कैसे प्राप्त करूं?

ऐसी स्थिति लें जहां एक शादी है जहां तालिका 1 मूल रूप से एक बैठने का चार्ट है, और तालिका 2 भोजन विकल्प है जो प्रत्येक तालिका/सीट चुना गया है। तालिका 1 में सुविधाजनक TableSeatID है, लेकिन तालिका 2 में तुलनीय आईडी नहीं है।

नमूना डेटा:

enter image description here

परिणाम, सभी 4 लाइनों को दिखाने के लिए WeddingTable 001 पर सभी 3 सीटें और WeddingTable 002.

वांछित परिणाम पर एक सीट जा रहा है की जरूरत है:

enter image description here

+4

नमूना डेटा, अपेक्षित परिणाम और वास्तविक परिणाम दिखाएं। –

+1

शायद बदलना और – Laurence

+1

क्या आप उन मानों से मेल खाते हैं जो किसी भी स्थिति से मेल खाते हैं? यदि ऐसा है, तो और –

उत्तर

33
select one.*, two.meal 
from table1 as one 
left join table2 as two 
on (one.weddingtable = two.weddingtable and one.tableseat = two.tableseat) 
0

ऐसा लगता है जैसे आप सभी मेट्रिक्स सूचीबद्ध करना चाहते हैं?

SELECT Criteria1, Criteria2, Metric1 As Metric 
FROM Table1 
UNION ALL 
SELECT Criteria1, Criteria2, Metric2 As Metric 
FROM Table2 
ORDER BY 1, 2 

आप केवल एक Criteria1 + Criteria2 संयोजन चाहते हैं, उन्हें समूह:

SELECT Criteria1, Criteia2, SUM(Metric) AS Metric 
FROM (
    SELECT Criteria1, Criteria2, Metric1 As Metric 
    FROM Table1 
    UNION ALL 
    SELECT Criteria1, Criteria2, Metric2 As Metric 
    FROM Table2 
) 
ORDER BY Criteria1, Criteria2 
4
SELECT aa.*, 
     bb.meal 
FROM table1 aa 
     INNER JOIN table2 bb 
      ON aa.tableseat = bb.tableseat AND 
       aa.weddingtable = bb.weddingtable 
     INNER JOIN 
     (
      SELECT a.tableSeat 
      FROM table1 a 
        INNER JOIN table2 b 
         ON a.tableseat = b.tableseat AND 
          a.weddingtable = b.weddingtable 
      WHERE b.meal IN ('chicken', 'steak') 
      GROUP by a.tableSeat 
      HAVING COUNT(DISTINCT b.Meal) = 2 
     ) c ON aa.tableseat = c.tableSeat 
+0

जबकि मैं भविष्य में समस्या हल करने के लिए निश्चित रूप से उस वेबसाइट को ध्यान में रखूंगा, वहीं परिणाम दिए गए हैं जो मैं वर्तमान में प्राप्त कर रहा हूं, न कि मुझे उन्हें क्या चाहिए। परिणाम डेटा के 4 पंक्तियों के लायक होना चाहिए। – tarheel

+0

लाइन 'WHERE b.meal IN (' चिकन ',' स्टेक ')' नहीं हो सकता है, क्योंकि मैं केवल 2000 से अधिक संभावनाओं को टाइप नहीं कर सकता हूं कि इस विशेष फ़ील्ड में मेरे वास्तविक डेटा में है। – tarheel

+0

तो आप इसे एप्लिकेशन परत में संभाल लेंगे। अगर आपको लगता है कि यह नहीं हो सकता है, तो आप इसके लिए कैसे खोज करेंगे? –

1
create table a1 
(weddingTable INT(3), 
tableSeat INT(3), 
tableSeatID INT(6), 
Name varchar(10)); 

insert into a1 
(weddingTable, tableSeat, tableSeatID, Name) 
values (001,001,001001,'Bob'), 
(001,002,001002,'Joe'), 
(001,003,001003,'Dan'), 
(002,001,002001,'Mark'); 

create table a2 
(weddingTable int(3), 
tableSeat int(3), 
Meal varchar(10)); 

insert into a2 
(weddingTable, tableSeat, Meal) 
values 
(001,001,'Chicken'), 
(001,002,'Steak'), 
(001,003,'Salmon'), 
(002,001,'Steak'); 

select x.*, y.Meal 

from a1 as x 
JOIN a2 as y ON (x.weddingTable = y.weddingTable) AND (x.tableSeat = y. tableSeat); 
+0

कोई विवरण? – Dmitry

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

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