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

यूनियन का उपयोग करते समय परिणाम दो तालिकाओं के बीच कैसे मिश्रित होते हैं?

यदि आप किसी संघ के परिणामों से पंक्तियों को वैकल्पिक करना चाहते हैं, तो आपको उनमें से प्रत्येक को एक रैंक देना होगा जो दो से बढ़ जाए - एक ऑड्स के लिए, एक ईवन के लिए।

select @rank := @rank + 2 `rank`, *
  from table1, (select @rank := -1) q
    where column1 = 'anything'
union all
select @rank2 := @rank2 + 2 `rank`, *
  from table2, (select @rank2 := 0) q
    where column1 = 'anything'
order by rank asc;

sqlfiddle नीचे दिखता है और मैं एक डेमो बनाउंगा, लेकिन इसे काम करना चाहिए।

@rank और @rank2 चर हैं। @rank2 := @rank2 + 2 वेतन वृद्धि @rank द्वारा 2 परिणाम सेट में प्रत्येक पंक्ति के लिए, और परिणामों में नया मान शामिल करता है।from table2, (select @rank2 := 0) q वैरिएबल को 0 . में इनिशियलाइज़ करने के लिए बाध्य करने का एक तरीका है अतिरिक्त प्रश्नों को चलाने के बिना। -1 . पर रैंक काउंटर शुरू करके पहली क्वेरी के लिए, और -0 दूसरी क्वेरी के लिए, पहली क्वेरी की प्रत्येक पंक्ति को 1,3,5,7,... क्रम में एक रैंक प्राप्त होती है , और दूसरी क्वेरी की प्रत्येक पंक्ति को 2,4,6,8,... क्रम में एक रैंक प्राप्त होती है

उदाहरण

mysql> create table table1 (id integer primary key auto_increment, column1 varchar(25));
Query OK, 0 rows affected (0.08 sec)

mysql> create table table2 (id integer primary key auto_increment, column1 varchar(25));
Query OK, 0 rows affected (0.08 sec)

mysql> insert into table1 (column1) values ('abcd'), ('lmno'), ('abcd'), ('lmno'), ('pqr');
Query OK, 5 rows affected (0.03 sec)
Records: 5  Duplicates: 0  Warnings: 0

mysql> insert into table2 (column1) values ('lmno'), ('abcd'), ('abcd'), ('lmno'), ('abcd'), ('abcd'), ('abcd');
Query OK, 7 rows affected (0.05 sec)
Records: 7  Duplicates: 0  Warnings: 0

और डेटा:

mysql> select * from table1;
+----+---------+
| id | column1 |
+----+---------+
|  1 | abcd    |
|  2 | lmno    |
|  3 | abcd    |
|  4 | lmno    |
|  5 | pqr     |
+----+---------+
5 rows in set (0.00 sec)

mysql> select * from table2;
+----+---------+
| id | column1 |
+----+---------+
|  1 | lmno    |
|  2 | abcd    |
|  3 | abcd    |
|  4 | lmno    |
|  5 | abcd    |
|  6 | abcd    |
|  7 | abcd    |
+----+---------+
7 rows in set (0.00 sec)

और परिणाम:

mysql> select @rank := @rank + 2 `rank`, id from table1, (select @rank := -1) q where column1 = 'abcd' union select @rank2 := @rank2 + 2 `rank`, id from table2, (select @rank2 := 0) q where column1 = 'abcd' order by rank asc;
+------+----+
| rank | id |
+------+----+
|    1 |  1 |
|    2 |  2 |
|    3 |  3 |
|    4 |  3 |
|    6 |  5 |
|    8 |  6 |
|   10 |  7 |
+------+----+
7 rows in set (0.00 sec)



  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 परिवर्तन innodb_large_prefix

  3. एक MySQL तालिका में लापता मानों को इंटरपोलेट करें

  4. `सेलेक्ट 'ए' =0;' 1 का परिणाम क्यों है?

  5. एक प्रश्न पूछें - MySQL और PHP