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

उन सभी डेटा का चयन कैसे करें जिनकी इनपुट सरणी मिली और mysql में नहीं मिली

लेफ्ट जॉइन / राइट जॉइन कॉन्सेप्ट के लिए एक हेल्पर टेबल का इस्तेमाल किया जाता है लेकिन यह उतना आसान नहीं था।

मेरे उत्तर यहाँ से (संपादित करें 3) यहाँ :

CREATE TABLE 4kTable
(   -- a helper table of about 4k consecutive ints
    id int auto_increment primary key,
    thing int null
)engine=MyISAM;

insert 4kTable (thing) values (null),(null),(null),(null),(null),(null),(null),(null),(null);
insert 4kTable (thing) select thing from 4kTable;
insert 4kTable (thing) select thing from 4kTable;
insert 4kTable (thing) select thing from 4kTable;
insert 4kTable (thing) select thing from 4kTable;
insert 4kTable (thing) select thing from 4kTable;
insert 4kTable (thing) select thing from 4kTable;
insert 4kTable (thing) select thing from 4kTable;
insert 4kTable (thing) select thing from 4kTable;
insert 4kTable (thing) select thing from 4kTable;
-- verify:
-- select min(id),max(id),count(*) from 4kTable;
-- 1 4608 4608

ALTER TABLE 4kTable ENGINE = InnoDB; -- *********** it is now InnoDB

उपयोगकर्ता fthiella से संशोधित उत्तर से ... वह पोस्ट यहां

select SUBSTRING_INDEX(SUBSTRING_INDEX(@str, ',', 4k.id), ',', -1) name 
from 
  4kTable 4k  
  cross join (select @str:='SMITH,WARD,KING,TOM') vars 
  on CHAR_LENGTH(@str) 
     -CHAR_LENGTH(REPLACE(@str, ',', ''))>=4k.id-1; 
+-------+
| name  |
+-------+
| SMITH |
| WARD  |
| KING  |
| TOM   |
+-------+

तो उपरोक्त एक क्वेरी में एक सीएसवी को बंद करने और उसमें से एक तालिका उत्पन्न करने का सामान्य रूप है।

अब एक व्युत्पन्न तालिका बनाएं (d ) उपरोक्त में से, RIGHT JOIN . के माध्यम से संयोजित करें ऑप कोड के साथ (वह स्कीमा ऑप कोड में दिखाया गया था)

select d.name as rtable_name,e.empno,e.ename,e.job,e.mgr,e.hiredate,e.sal,e.comm,e.deptno 
from emp e 
right join 
(   select SUBSTRING_INDEX(SUBSTRING_INDEX(@str, ',', 4k.id), ',', -1) name  
    from 4kTable 4k  
    cross join (select @str:='SMITH,WARD,KING,TOM') vars 
    on CHAR_LENGTH(@str) 
        -CHAR_LENGTH(REPLACE(@str, ',', ''))>=4k.id-1 
) d 
on d.name=e.ename; 

परिणाम:

+-------------+-------+-------+-----------+------+------------+---------+--------+--------+
| rtable_name | empno | ename | job       | mgr  | hiredate   | sal     | comm   | deptno |
+-------------+-------+-------+-----------+------+------------+---------+--------+--------+
| SMITH       |  7369 | SMITH | CLERK     | 7902 | 1980-12-17 |  800.00 |   NULL |     20 |
| WARD        |  7521 | WARD  | SALESMAN  | 7698 | 1981-02-22 | 1250.00 | 500.00 |     30 |
| KING        |  7839 | KING  | PRESIDENT | NULL | 1981-11-17 | 5000.00 |   NULL |     10 |
| TOM         |  NULL | NULL  | NULL      | NULL | NULL       |    NULL |   NULL |   NULL |
+-------------+-------+-------+-----------+------+------------+---------+--------+--------+



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PHP में पीडीओ के साथ दशमलव/डबल/फ्लोट मानों को बांधने का सबसे अच्छा तरीका क्या है?

  2. 'लोड डेटा' के साथ MySQL अनुमति त्रुटियां

  3. Mysql मौजूद बनाम IN - सहसंबद्ध सबक्वेरी बनाम सबक्वेरी?

  4. MySQL Now () उच्च परिशुद्धता के साथ कार्य करता है

  5. पॉलिमॉर्फिक टेबल पर कॉलम द्वारा लारवेल ऑर्डर परिणाम