मुझे एक तालिका से एक मूल्य का चयन करने की जरूरत है, इसे एक सूची में परिवर्तित करें, फिर उस सूची के माध्यम से खोजें यदि यह किसी अन्य सूची में है, तो केवल एक को मिलान करना होगा।

मेरे पास एक सारणी है जो निम्न की तरह दिखती है:

_id    name    group

1      Bob     mathematics,science,information technology...(list can be any size)
2      John    science,mathematics,natural science,life orientation...(list can be any size)

और मेरे पास निम्न सरणी है:

arr = [science,mathematics]

मुझे समूह कॉलम को अल्पविराम सीमांकक के माध्यम से विभाजित करने की आवश्यकता है।

 ["mathematics","science","information technology"]

फिर इस सूची की तुलना मेरी arr सरणी से करें। और यदि उनमें से 1 मेल खाता है, तो सभी फ़ील्ड लौटा दें।

मैंने substr और instr की कोशिश की है लेकिन यह काम नहीं कर सका।

SELECT substr(groups, 1, pos-1) AS g FROM (SELECT groups, instr(groups, ',') AS pos FROM courses WHERE _id = 2);

लेकिन यह केवल पहला लौटाता है। सुनिश्चित नहीं है कि यह sqlite3 में संभव है, बिना किसी अतिरिक्त पुस्तकालय के।

यही होने की जरूरत है:

SELECT * FROM subject WHERE ["mathematics","science","information technology"] in ("science","mathematics")
0
JBin 9 जिंदा 2019, 13:24

1 उत्तर

सबसे बढ़िया उत्तर

यहां विद RECURSIVE का उपयोग करने का तरीका दिया गया है। विचार किया जा रहा है: एक आभासी दृश्य बनाएं जो "समूह" कॉलम को टोकन करता है। यह प्रत्येक समूह तत्व को दृश्य की एक पंक्ति में रखकर, आपके substr/instr दृष्टिकोण पर आधारित है। यहाँ एक नमूना क्वेरी है:

WITH RECURSIVE
  glist(id, head, rest) AS (
 
select id,
CASE when instr(groups,",") = 0 then groups else substr(groups,1,instr(groups,',')-1) END, -- head
CASE when instr(groups,',') = 0 then groups else substr(groups,instr(groups,',') + 1) END --rest

from subjects 


UNION ALL
SELECT id, substr(rest,1,instr(rest,',') - 1), --head
substr(rest,instr(rest,',')+1) -- rest

 FROM glist
 WHERE id = id
 and  instr(rest,',') !=0 -- base case
)
select distinct subjects.*
from glist g
JOIN subjects on subjects.id = g.id
where head in ('science','mathematics')
order by id

एनबी "देखने" के लिए कि glist कैसा दिखता है, select distinct.... क्वेरी को select * from glist से बदलें

1
Community 20 जून 2020, 12:12