คำถามติดแท็ก join

JOIN เป็นการดำเนินการทั่วไปในพีชคณิตเชิงสัมพันธ์สำหรับการดำเนินการรวมกันในความสัมพันธ์สองหรือมากกว่าในระบบฐานข้อมูลเชิงสัมพันธ์ เข้าร่วมยังเป็นคำหลักของภาษา SQL สำหรับการดำเนินการนี้

14
แบบสอบถามย่อยเข้าร่วม
ฉันปรับโครงสร้างส่วนที่ช้าของแอปพลิเคชันที่เราสืบทอดจาก บริษัท อื่นให้ใช้การเข้าร่วมภายในแทนแบบสอบถามย่อยเช่น: WHERE id IN (SELECT id FROM ...) แบบสอบถามที่มีการปรับโครงสร้างใหม่จะทำงานได้เร็วขึ้นประมาณ 100x (~ 50 วินาทีถึง ~ 0.3) ฉันคาดว่าจะได้รับการปรับปรุง แต่ใคร ๆ ก็สามารถอธิบายได้ว่าทำไมมันถึงรุนแรง คอลัมน์ที่ใช้ในส่วนคำสั่ง where ถูกทำดัชนีทั้งหมด SQL ดำเนินการค้นหาในส่วนคำสั่ง where หนึ่งครั้งต่อแถวหรือบางอย่างหรือไม่? อัปเดต - อธิบายผลลัพธ์: ความแตกต่างอยู่ในส่วนที่สองของแบบสอบถาม "where id in ()" - 2 DEPENDENT SUBQUERY submission_tags ref st_tag_id st_tag_id 4 const 2966 Using where vs …

4
MySQL: การแบ่งประเภทของการรวมอย่างรวดเร็ว
ฉันต้องการแบ่งประเภทของ MySQL อย่างรวดเร็ว ฉันรู้สิ่งเหล่านี้ส่วนที่เหลือฉันไม่แน่ใจว่าพวกเขาหมายถึงอะไร คั่นด้วยเครื่องหมายจุลภาค (สิ่งที่ว่าเป็นระยะสั้นนี้?):SELECT * FROM a, b WHERE b.id = a.beeId AND ... แสดงข้อมูลจาก a แม้ว่าจะไม่มีการจับคู่ใน b: SELECT * FROM a LEFT OUTER JOIN b ON b.id = a.beeId WHERE ... ฉันเคยเห็นผู้เข้าร่วมคนอื่น ๆ แต่ต้องการรู้ว่าอะไรที่ทำให้พวกเขาแตกต่างคืออะไรINNER/ OUTERเพิ่มการLEFTเปลี่ยนแปลงอะไร ฉันรู้แล้วว่าการเข้าร่วมทำงานอย่างไรฉันแค่อยากรู้ว่ามีการเข้าร่วมประเภทอื่นหรือไม่หรือหากพวกเขาเป็นวิธีที่แตกต่างกันในการรับผลลัพธ์เดียวกัน
157 mysql  join 

4
ผู้ประกอบการ“ (+)” ของออราเคิล
ฉันกำลังตรวจสอบคำสั่ง SQL เก่าบางส่วนเพื่อจุดประสงค์ในการจัดทำเอกสารและอาจปรับปรุงให้ดีขึ้น DBMS คือ Oracle ฉันไม่เข้าใจข้อความที่อ่านเช่นนี้ select ... from a,b where a.id=b.id(+) ฉันสับสนเกี่ยวกับ(+)โอเปอเรเตอร์และไม่สามารถรับได้ที่ฟอรัมใด ๆ ... (การค้นหา + ภายในเครื่องหมายคำพูดไม่ทำงานเช่นกัน) อย่างไรก็ตามฉันใช้ 'อธิบายแผน' ของ SQLDeveloper และฉันได้ผลลัพธ์ที่บอกว่าHASH JOIN, RIGHT OUTERเป็นต้น จะมีความแตกต่างหรือไม่หากฉันลบ(+)โอเปอเรเตอร์เมื่อสิ้นสุดการสืบค้น ฐานข้อมูลต้องเป็นไปตามเงื่อนไข (เช่นมีดัชนีบางอย่างหรือไม่) ก่อนที่จะ(+)สามารถใช้งานได้หรือไม่? มันจะมีประโยชน์อย่างมากหากคุณสามารถให้ความเข้าใจได้ง่ายหรือลิงก์ที่ดีที่ฉันสามารถอ่านเกี่ยวกับเรื่องนี้ ขอบคุณ!
155 sql  oracle  join  outer-join 

9
ฉันสามารถใช้คำสั่ง CASE ในเงื่อนไข JOIN ได้หรือไม่?
รูปภาพต่อไปนี้เป็นส่วนหนึ่งของ Microsoft SQL Server 2008 R2 System Views จากภาพที่เราจะเห็นว่าความสัมพันธ์ระหว่างsys.partitionsและขึ้นอยู่กับมูลค่าของsys.allocation_units sys.allocation_units.typeดังนั้นเพื่อรวมเข้าด้วยกันฉันจะเขียนสิ่งที่คล้ายกันนี้: SELECT * FROM sys.indexes i JOIN sys.partitions p ON i.index_id = p.index_id JOIN sys.allocation_units a ON CASE WHEN a.type IN (1, 3) THEN a.container_id = p.hobt_id WHEN a.type IN (2) THEN a.container_id = p.partition_id END แต่โค้ดด้านบนให้ข้อผิดพลาดทางไวยากรณ์ ฉันเดาว่าเป็นเพราะCASEคำสั่ง ใครก็ได้ช่วยอธิบายหน่อย เพิ่มข้อความแสดงข้อผิดพลาด: ข่าวสารเกี่ยวกับ …
145 sql  sql-server  join  case 

6
LEFT JOIN เฉพาะแถวแรก
ฉันอ่านกระทู้มากมายเกี่ยวกับการรับเฉพาะแถวแรกของการเข้าร่วมด้านซ้าย แต่ด้วยเหตุผลบางประการสิ่งนี้ไม่ได้ผลสำหรับฉัน นี่คือโครงสร้างของฉัน (ทำให้ง่ายขึ้นแน่นอน) ฟีด id | title | content ---------------------- 1 | Feed 1 | ... ศิลปิน artist_id | artist_name ----------------------- 1 | Artist 1 2 | Artist 2 feeds_artists rel_id | artist_id | feed_id ---------------------------- 1 | 1 | 1 2 | 2 | 1 ... ตอนนี้ฉันต้องการรับบทความและเข้าร่วมเฉพาะศิลปินคนแรกเท่านั้นและฉันก็คิดถึงสิ่งนี้: SELECT …

4
ฉันจะเข้าร่วม SQL หลายตารางโดยใช้ ID ได้อย่างไร
ฉันมี 4 ตารางที่แตกต่างกันที่ฉันต้องการเข้าร่วม ตารางมีโครงสร้างที่มีคอลัมน์ดังนี้ TableA - aID | nameA | dID TableB - bID | nameB | cID | aID TableC - cID | nameC | date TableD - dID | nameD เริ่มต้นด้วยตาราง A ฉันเข้าใจวิธีเข้าร่วมตาราง a และ c โดยใช้ b เนื่องจาก b มีคีย์หลักสำหรับตารางเหล่านั้น ฉันต้องการที่จะเข้าร่วม TableD บน TableA เช่นกัน ด้านล่างนี้เป็นคำสั่ง SQL …
141 mysql  sql  join 

5
ใช้ฟังก์ชันการเพจ (ข้าม / รับ) กับแบบสอบถามนี้
ฉันได้รับการพยายามที่จะเข้าใจเล็กน้อยเกี่ยวกับวิธีการใช้เพจจิ้งที่กำหนดเองใน SQL เช่นการอ่านบทความเช่นนี้ ฉันมีคำถามต่อไปนี้ซึ่งทำงานได้อย่างสมบูรณ์ แต่ฉันต้องการใช้การเพจกับสิ่งนี้ SELECT TOP x PostId FROM ( SELECT PostId, MAX (Datemade) as LastDate from dbForumEntry group by PostId ) SubQueryAlias order by LastDate desc ฉันต้องการอะไร ฉันมีฟอรั่มโพสต์พร้อมรายการที่เกี่ยวข้อง ฉันต้องการรับโพสต์ด้วยรายการที่เพิ่มล่าสุดดังนั้นฉันสามารถเลือกโพสต์ที่ถกเถียงกันล่าสุด ตอนนี้ฉันต้องการที่จะได้รับ "10 ถึง 20 โพสต์ล่าสุดที่ใช้งานล่าสุด" แทน "top 10" ฉันลองทำอะไร ฉันพยายามใช้ฟังก์ชัน ROW เป็นหนึ่งในบทความ แต่จริงๆแล้วไม่มีโชค มีแนวคิดใดบ้างที่จะนำไปใช้

2
SQL เข้าร่วมในหลายคอลัมน์ในตารางเดียวกัน
ฉันมี 2 แบบสอบถามย่อย แต่ฉันมีปัญหาในการเข้าร่วมคอลัมน์ด้วยกันจากตารางเดียวกัน ฉันเหนื่อย: SELECT * FROM (SELECT userid, listid FROM user_views_table WHERE date='2013-05-15' AND view_type='lists') a JOIN (SELECT sourceid, destinationid FROM actions_table WHERE date='2013-05-15' AND payloadtype='lists_user' AND actiontype='delete') b ON a.userid = b.sourceid ON a.listid = b.destinationid; ถ้าฉันเพียงแค่จบแบบสอบถามกับON a.userid = b.sourceidการทำงาน แต่ฉันจะยังเข้าร่วมตารางเหล่านี้ในคอลัมน์อื่นยังON a.listid = b.destinationid?? ความช่วยเหลือใด ๆ ชื่นชม
136 sql  join 

4
ปัญหาการเข้าร่วมของ Pandas: คอลัมน์ทับซ้อนกัน แต่ไม่ได้ระบุคำต่อท้าย
ฉันมีกรอบข้อมูล 2 รายการต่อไปนี้: df_a = mukey DI PI 0 100000 35 14 1 1000005 44 14 2 1000006 44 14 3 1000007 43 13 4 1000008 43 13 df_b = mukey niccdcd 0 190236 4 1 190237 6 2 190238 7 3 190239 4 4 190240 7 เมื่อฉันพยายามเข้าร่วม 2 dataframes …
136 python  join  pandas 

2
MySQL เข้าร่วมกับส่วนคำสั่งที่
ฉันมีสองตารางที่ฉันต้องการเข้าร่วม ฉันต้องการหมวดหมู่ทั้งหมดในตารางหมวดหมู่และหมวดหมู่ทั้งหมดที่สมัครใช้งานโดยผู้ใช้ในตารางหมวดหมู่_subscriptions เป็นหลักนี้คือแบบสอบถามของฉันจนถึง: SELECT * FROM categories LEFT JOIN user_category_subscriptions ON user_category_subscriptions.category_id = categories.category_id ใช้งานได้ดี แต่ฉันต้องการเพิ่มส่วนคำสั่งที่ส่วนท้ายของแบบสอบถามซึ่งทำให้การเข้าร่วม / equi ภายในเป็นหลัก SELECT * FROM categories LEFT JOIN user_category_subscriptions ON user_category_subscriptions.category_id = categories.category_id WHERE user_category_subscriptions.user_id = 1 ฉันจะรับหมวดหมู่ทั้งหมดตลอดจนหมวดหมู่ทั้งหมดที่สมัครรับข้อมูลโดยผู้ใช้รายใดรายหนึ่งโดยใช้คำค้นหาเดียวได้อย่างไร category_id เป็นกุญแจสำคัญในตารางหมวดหมู่และ user_category_subscriptions user_id อยู่ในตาราง user_category_subscriptions ขอบคุณ
130 mysql  join  where-clause 

4
เข้าร่วมระหว่างตารางในสองฐานข้อมูลที่แตกต่างกัน?
ใน MySQL, ฉันมีสองฐานข้อมูลที่แตกต่างกัน - ขอเรียกพวกเขาและB เป็นไปได้หรือไม่ที่จะทำการรวมระหว่างตารางที่อยู่ในฐานข้อมูลAกับตารางที่อยู่ในฐานข้อมูลB ?
124 mysql  sql  join 

3
เหตุใด X [Y] การรวม data.tables จึงไม่อนุญาตให้รวมภายนอกแบบเต็มหรือการรวมด้านซ้าย
นี่เป็นคำถามเชิงปรัชญาเกี่ยวกับ data.table join syntax ฉันพบการใช้งาน data.tables มากขึ้นเรื่อย ๆ แต่ยังคงเรียนรู้ ... รูปแบบการเข้าร่วมX[Y]สำหรับ data.tables นั้นกระชับสะดวกและมีประสิทธิภาพ แต่เท่าที่ฉันบอกได้มันรองรับเฉพาะการรวมภายในและการรวมภายนอกที่ถูกต้องเท่านั้น ในการรับการรวมด้านซ้ายหรือแบบเต็มฉันต้องใช้merge: X[Y, nomatch = NA] - แถวทั้งหมดใน Y - การรวมภายนอกด้านขวา (ค่าเริ่มต้น) X[Y, nomatch = 0] - เฉพาะแถวที่มีการจับคู่ทั้ง X และ Y - การเข้าร่วมภายใน merge(X, Y, all = TRUE) - ทุกแถวจากทั้ง X และ Y - การรวมภายนอกแบบเต็ม merge(X, Y, …
123 r  join  data.table 

4
MySQL Multiple Joins ในแบบสอบถามเดียว?
ฉันมีคำถามต่อไปนี้: SELECT dashboard_data.headline, dashboard_data.message, dashboard_messages.image_id FROM dashboard_data INNER JOIN dashboard_messages ON dashboard_message_id = dashboard_messages.id ดังนั้นฉันจึงใช้INNER JOINและคว้าไฟล์image_id. ตอนนี้ฉันต้องการใช้ image_id นั้นและเปลี่ยนเป็นimages.filenameจากตารางรูปภาพ ฉันจะเพิ่มสิ่งนั้นในแบบสอบถามของฉันได้อย่างไร
121 mysql  sql  join 

2
ตัวอย่างที่ดีสำหรับ boost :: algorithm :: join
เมื่อเร็ว ๆ นี้ฉันต้องการใช้boost :: algorithm :: joinแต่ฉันไม่พบตัวอย่างการใช้งานใด ๆ และฉันไม่ต้องการเสียเวลามากมายในการเรียนรู้ไลบรารี Boost Range เพียงเพื่อใช้ฟังก์ชันนี้ ใครสามารถให้ตัวอย่างที่ดีในการใช้การเข้าร่วมในคอนเทนเนอร์ของสตริงได้หรือไม่? ขอบคุณ
116 c++  string  boost  join 

4
นับด้วยเงื่อนไข IF ในแบบสอบถาม MySQL
ฉันมีสองตารางตารางหนึ่งสำหรับข่าวและอีกตารางหนึ่งสำหรับแสดงความคิดเห็นและฉันต้องการรับจำนวนความคิดเห็นที่ได้รับการตั้งสถานะเป็นอนุมัติ SELECT ccc_news . *, count(if(ccc_news_comments.id = 'approved', ccc_news_comments.id, 0)) AS comments FROM ccc_news LEFT JOIN ccc_news_comments ON ccc_news_comments.news_id = ccc_news.news_id WHERE `ccc_news`.`category` = 'news_layer2' AND `ccc_news`.`status` = 'Active' GROUP BY ccc_news.news_id ORDER BY ccc_news.set_order ASC LIMIT 20 แต่ปัญหาของแบบสอบถามนี้คือค่าต่ำสุดที่ดึงมาสำหรับคอลัมน์ความคิดเห็นคือ 1 ไม่ว่าจะมีความคิดเห็นใด ๆ ที่สอดคล้องกับข่าวนั้นหรือไม่ ความช่วยเหลือใด ๆ จะได้รับการชื่นชมอย่างมาก

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.