मुझे कुछ तालिकाओं के बीच आंतरिक जुड़ने के दौरान डुप्लिकेट फेंकने वाली क्वेरी के साथ कुछ समस्याएं आ रही हैं।एसक्यूएल एकाधिक तालिका डुप्लिकेट फेंकने में शामिल हों
अनिवार्य रूप से, मैं वीडियो के आधार पर कुछ टैग, और चैनल (सोच शैली) में शामिल हो रहा हूं इसलिए एक विशेष वीडियो फ़ाइल में एकाधिक टैग हो सकते हैं और कई चैनलों का हिस्सा हो सकते हैं।
दुर्भाग्य से, कई मैचों में दिखाई देता है :(मेरा आंत महसूस यह है कि क्वेरी प्रत्येक वीडियो के लिए वीडियो के साथ मेल खाती है और डबल अप को थूकती है (जैसा कि आप लिंक किए गए पहेली में देखेंगे, लेकिन यह देखते हुए कि मेरे ग्रैंड कुल एसक्यूएल अनुभव में शामिल हों लगभग 3 घंटे पहले मैंने अभी तक ठीक से उलझन में कामयाब रहा है, लेकिन अब यहां से जाने के लिए विशेषज्ञ सलाह के साथ कुछ समय के साथ क्या कर सकते हैं।
नीचे स्कीमा और क्वेरी है
: कुश्ती गया है, और यहाँ एक sqlfiddle लिंक,स्कीमा है
create table videos ( videoId int(1) AUTO_INCREMENT, videoUUID char(40), contentFolder varchar(50), title varchar(50), caption varchar(50), duration varchar(15), date TIMESTAMP, url varchar(55), text varchar(250), PRIMARY KEY (videoId) ); create table tags ( tagId int(1) AUTO_INCREMENT, tagName varchar(15), PRIMARY KEY (tagId) ); create table channels ( channelId int(1) AUTO_INCREMENT, channelName varchar(15), PRIMARY KEY (channelId) ); create table videoTags ( videoTagId int(1) AUTO_INCREMENT, videoId int(1), tagId int(1), PRIMARY KEY (videoTagId) ); create table videoChannels ( videoChannelId int(1) AUTO_INCREMENT, videoId int (1), channelId int (1), PRIMARY KEY (videoChannelId) ); // create trigger tuuid before insert on videos for each row begin set new.videoUUID = uuid(); end// insert into videos (contentFolder, title,caption,duration,url,text) values ("someDir/","A Movie Title", "Headline for Movie", "00:05:11", "http://someserver.ip/somedir/test.mp4", "Some text as part of the video file description here"); insert into tags (tagName) values ('Flowers'),('Dogs'),('Cats'),('YaMum'),('orlyowl'); insert into channels (channelName) values ('General'), ('NotSoGeneral'), ('Specific'), ('Broad'), ('Narrow'), ('Obsolete'); insert into videoTags (videoId,tagId) values (1,2),(1,5); insert into videoChannels (videoId,channelId) values (1,1),(1,4),(1,6);
क्वेरी:
select distinct v.*,group_concat(t.tagName)Tags,
group_concat(c.channelName)Channels
from videos as v
inner join videoTags as vt on v.videoId = vt.videoid
inner join tags as t on t.tagId = vt.tagId
inner join videoChannels as vc on v.videoId = vc.videoId
inner join channels as c on c.channelId = vc.channelId
group by v.videoId;
Am मैं इस बारे में सही रास्ते पर जा रहा? क्या इस तरह की क्वेरी को संरचित करने के तरीके के बारे में सिर्फ एक मौलिक गलती है? या जो मैं पूरा करने की कोशिश कर रहा हूं उसके लिए स्कीमा गलत है।
किसी भी मदद की सराहना की जाएगी!
@J लो उत्तर के लिए धन्यवाद!
उत्तर: DISTINCT कीवर्ड, मैं इसे का चयन करें बयान में कोशिश की, लेकिन इसके उपयोग के रूप में अनिश्चित थे, तो पूरी तरह से सराहना नहीं की थी, जहां उसका उपयोग किया जा सकता है, @J लो तो संक्षेप बताया बाहर, मैं कर सकते हैं मेरी group_concat भीतर इसका इस्तेमाल, इस प्रकार क्वेरी दे रही है:
select v.*,group_concat(distinct t.tagName)Tags,
group_concat(distinct c.channelName)Channels
from videos as v
inner join videoTags as vt on v.videoId = vt.videoid
inner join tags as t on t.tagId = vt.tagId
inner join videoChannels as vc on v.videoId = vc.videoId
inner join channels as c on c.channelId = vc.channelId
group by v.videoId;
यह mysql सही है? आपको इस मामले में एसक्यूएल-सर्वर टैग का उपयोग नहीं करना चाहिए। लेकिन आपके प्रश्न को बहुत अच्छी तरह तैयार करने के लिए धन्यवाद। – Szymon
चीयर्स साथी, मैं बस सुझाए गए टैग के साथ गया, उन्हें थोड़ा और करीब से पढ़ना चाहिए था। – splintex