/ / चुनिंदा sql - mysql, sql, का उपयोग करके एक में दो टेबल प्रदर्शित करें

चयन एसक्यूएल - mysql, sql, शामिल का उपयोग कर दो टेबल प्रदर्शित करें

मेरे पास टेबल ए है

============
| id | val |
=====+======
| 1  | abc |
| 1  | def |
| 2  | ghi |
| 2  | jkl |
============

मेरे पास टेबल बी है

============
| id | val2 |
=====+======
| 1  | rty |
| 1  | vbn |
| 2  | uio |
| 2  | zxc |
============

मैं इस तरह दो टेबल प्रदर्शित करना चाहता हूं

===================
| id | val | val2 |
=====+=====+=======
| 1  | abc | rty  |
| 1  | def | vbn  |
| 2  | ghi | uio  |
| 2  | jkl | zxc  |
===================

मेरी समस्या यह है कि मैं अतिरेक कर रहा हूँ ..

उत्तर:

जवाब के लिए 0 № 1

मुझे गॉर्डन का दृष्टिकोण पसंद है, क्योंकि यह प्रत्येक तालिका में पंक्तियों की समान संख्या को नहीं मानता है, लेकिन यहाँ एक है JOIN संस्करण:

SELECT a.id,a.val,b.val2
FROM (SELECT @row_number:=@row_number+1 AS row_number
,id,val
FROM Table1 a cross join (select @row_number := 0) b
)a
JOIN (SELECT @row_number2:=@row_number2+1 AS row_number2
,id,val2
FROM Table2 a cross join (select @row_number2 := 0) b
)b
ON a.Row_Number = b.Row_Number2
AND a.id = b.id

यहाँ उसका एक कार्यशील संस्करण है UNION संस्करण:

SELECT Row_Number,ID,MAX(Val) AS Val,MAX(Val2) AS Val2
FROM (SELECT @row_number:=@row_number+1 AS row_number
,id,val,NULL as Val2
FROM Table1 a cross join (select @row_number := 0) b
UNION ALL
SELECT @row_number2:=@row_number2+1 AS row_number
,id,NULL,val2
FROM Table2 a cross join (select @row_number2 := 0) b
)sub
GROUP BY Row_Number,ID

दोनों का डेमो: एसक्यूएल फिडल


उत्तर № 2 के लिए 1

हां, आपको एक समस्या है क्योंकि आपके पास "उचित नहीं है join कुंजी। आप एक बनाने के लिए चर का उपयोग करके ऐसा कर सकते हैं। आपके द्वारा प्रदत्त डेटा के लिए कुछ इस तरह काम करेगा:

select min(id), max(aval), max(bval)
from ((select id, val as aval, NULL as bval, @rna := @rna + 1 as seqnum
from tablea a cross join (select @rna := 0)
) union all
(select id, NULL val, @rnb := @rnb + 1 as seqnum
from tableb b cross join (select @rnb := 0)
)
) ab
group by seqnum;

जवाब के लिए 0 № 3

आप बस इस का उपयोग कर सकते हैं INNER JOIN। नीचे मेरी क्वेरी देखें:

SELECT A.id,val,val2 FROM
(SELECT
@row_number:=@row_number+1 AS RowNumber,
id,
val
FROM TableA, (SELECT @row_number:=0) AS t ORDER BY val) AS A
INNER JOIN
(SELECT
@row_number:=@row_number+1 AS RowNumber,
id,
val2
FROM TableB, (SELECT @row_number:=0) AS t ORDER BY val2) AS B
ON A.RowNumber=B.RowNumber