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

คำ SQL ใช้เพื่ออธิบายเมื่อมีการใช้คำสั่ง "SELECT" เป็นส่วนหนึ่งของคำสั่ง SQL ที่ใหญ่กว่า คำสั่งที่ใหญ่กว่าอาจเป็น DML และมักจะอยู่ในวงเล็บหรือวงเล็บ

3
เหตุใดแบบสอบถามนี้จึงใช้งานได้
ฉันมีสองตาราง table_a (id, ชื่อ) และ table_b (id) สมมุติว่าบน Oracle 12c เหตุใดแบบสอบถามนี้จึงไม่ส่งคืนข้อยกเว้น select * from table_a where name in (select name from table_b); จากสิ่งที่ฉันเข้าใจ Oracle เห็นว่าเป็น select * from table_a where name = name; แต่สิ่งที่ฉันไม่ได้คือทำไม


2
นามแฝงของแบบสอบถามย่อยเหมือนกับนามแฝงข้อความค้นหาหลัก
ฉันมีแบบสอบถาม SQL ซึ่งมีชื่อแทนเหมือนกับนามแฝงของแบบสอบถามบางส่วน ตัวอย่างเช่น: select * from ROOM r where ... ( select * from ROAD r where ... ) วิธีนี้ใช้งานได้ดีเนื่องจากนามแฝงของแบบสอบถามย่อยดูเหมือนจะซ่อนตัวหลัก มันจะทำงานแบบนั้นในทุกกรณีหรือไม่? ฉันจะได้รับผลลัพธ์ที่ไม่ได้กำหนดหรือไม่? หากไม่เป็นเช่นนั้นฉันจะอ้างอิงถึงข้อความค้นหาหลักได้rอย่างไร

2
การเลือกหลายคอลัมน์ผ่านแบบสอบถามย่อย
ฉันพยายามเลือกคอลัมน์ 2 จากแบบสอบถามย่อยในแบบสอบถามต่อไปนี้ แต่ไม่สามารถทำได้ พยายามสร้างตารางนามแฝง แต่ยังไม่สามารถหาได้ SELECT DISTINCT petid, userid, (SELECT MAX(comDate) FROM comments WHERE petid=pet.id) AS lastComDate, (SELECT userid FROM comments WHERE petid=pet.id ORDER BY id DESC LIMIT 1) AS lastPosterID FROM pet LEFT JOIN comments ON pet.id = comments.petid WHERE userid='ABC' AND deviceID!='ABC' AND comDate>=DATE_SUB(CURRENT_TIMESTAMP, INTERVAL 2 MONTH); …

1
ข้อผิดพลาด Postgres [คอลัมน์จะต้องปรากฏในกลุ่มตามข้อหรือใช้ในฟังก์ชั่นรวม] เมื่อใช้แบบสอบถามย่อย
ฉันมีสองตารางและemployee phonesพนักงานสามารถมีหมายเลขโทรศัพท์ 0 ถึง n ฉันต้องการแสดงชื่อพนักงานพร้อมหมายเลขโทรศัพท์ ฉันใช้แบบสอบถามด้านล่างซึ่งทำงานได้ดี SELECT empname,array_agg(phonenumber) AS phonenumbers FROM employee LEFT OUTER JOIN phones ON employee.empid = phones.empid GROUP BY employee.empid ตารางพนักงานอาจมีแถวจำนวนมาก ฉันต้องการเรียกพนักงานเพียงบางคนในเวลาเดียวกัน ตัวอย่างเช่นฉันต้องการเรียกพนักงาน 3 คนด้วยหมายเลขโทรศัพท์ของพวกเขา ฉันพยายามเรียกใช้แบบสอบถามนี้ SELECT empname,array_agg(phonenumber) AS phonenumbers FROM (SELECT * FROM employee ORDER BY empname LIMIT 3 OFFSET 0) AS employee LEFT OUTER …

3
อัปเดตช้าในตารางขนาดใหญ่พร้อมแบบสอบถามย่อย
เมื่อSourceTableมีระเบียน> 15MM และBad_Phraseมีระเบียน> 3K แบบสอบถามต่อไปนี้จะใช้เวลาเกือบ 10 ชั่วโมงในการเรียกใช้บน SQL Server 2005 SP4 UPDATE [SourceTable] SET Bad_Count= ( SELECT COUNT(*) FROM Bad_Phrase WHERE [SourceTable].Name like '%'+Bad_Phrase.PHRASE+'%' ) ในภาษาอังกฤษคำนี้คือการนับจำนวนของวลีที่แตกต่างกันการระบุไว้ใน Bad_Phrase ที่มี substring ของสนามNameในแล้ววางผลว่าในสนามSourceTableBad_Count ฉันต้องการคำแนะนำเกี่ยวกับวิธีทำให้แบบสอบถามนี้ทำงานได้เร็วขึ้นอย่างมาก

1
เหตุใดแบบสอบถามย่อยจึงใช้การขนานและการเข้าร่วมไม่ได้
เหตุใดเซิร์ฟเวอร์ SQL จึงใช้ความขนานเมื่อเรียกใช้แบบสอบถามนี้ซึ่งใช้แบบสอบถามย่อย แต่ไม่ใช้เมื่อเข้าร่วม เวอร์ชันการเข้าร่วมจะทำงานเป็นอนุกรมและใช้เวลาดำเนินการนานกว่าประมาณ 30 เท่า เข้าร่วมเวอร์ชัน: ~ 30 วินาที เวอร์ชันย่อยของแบบสอบถาม: <1 วินาที แก้ไข: แผนแบบสอบถามเวอร์ชัน Xml: เข้าร่วมเวอร์ชัน รุ่น SUBQUERY

1
ข้อความค้นหาย่อยที่มีประสิทธิภาพต่ำและมีการเปรียบเทียบวันที่
เมื่อใช้แบบสอบถามย่อยเพื่อค้นหาจำนวนรวมของระเบียนก่อนหน้าทั้งหมดที่มีเขตข้อมูลที่ตรงกันประสิทธิภาพจะแย่มากในตารางที่มีระเบียนน้อยถึง 50k โดยไม่มีแบบสอบถามย่อยแบบสอบถามดำเนินการในไม่กี่มิลลิวินาที ด้วยแบบสอบถามย่อยเวลาดำเนินการขึ้นไปหนึ่งนาที สำหรับแบบสอบถามนี้ผลลัพธ์จะต้อง: รวมเฉพาะบันทึกเหล่านั้นภายในช่วงวันที่ที่กำหนด รวมการนับของระเบียนก่อนหน้าทั้งหมดไม่รวมระเบียนปัจจุบันโดยไม่คำนึงถึงช่วงวันที่ โครงสร้างตารางพื้นฐาน Activity ====================== Id int Identifier Address varchar(25) ActionDate datetime2 Process varchar(50) -- 7 other columns ตัวอย่างข้อมูล Id Address ActionDate (Time part excluded for simplicity) =========================== 99 000 2017-05-30 98 111 2017-05-30 97 000 2017-05-29 96 000 2017-05-28 95 111 2017-05-19 94 222 …

2
SQL Delete สามารถใช้คำสั่งย่อยได้อย่างไร
รหัสต่อไปนี้ถูกเพิ่มโดยหนึ่งในนักพัฒนาของเราเพื่อลบระเบียนที่ซ้ำกันออกจากตาราง: DELETE SubQuery FROM ( SELECT ID ,FK1 ,FK2 ,CreatedDateTime ,ROW_NUMBER() OVER(PARTITION BY FK1, FK2 ORDER BY CreatedDateTime) AS RowNumber FROM Table ) AS SubQuery WHERE RowNumber > 1 เมื่อตรวจสอบรหัสฉันคิดว่ามันจะไม่ทำงานอย่างไรก็ตามการทดสอบในสภาพแวดล้อมการทดสอบของเรา (SQL 2014) แสดงให้เห็นว่ามันเป็นเช่นนั้น! SQL ทราบได้อย่างไรว่าสามารถแก้ไขคิวรีย่อยและลบระเบียนได้tableอย่างไร

1
เหตุใดแบบสอบถาม SQL Server ของฉันจึงทำงานต่างจาก UPDATE มากกว่า SELECT
ฉันเขียนแบบสอบถาม SQL Server ที่อัปเดตระเบียนให้มีหมายเลขตามลำดับหลังจากแบ่งพาร์ติชันในเขตข้อมูล เมื่อฉันเรียกใช้เป็นคำสั่ง SELECT ทุกอย่างดูดี: DECLARE @RunDetailID INT = 448 DECLARE @JobDetailID INT SELECT @JobDetailID = [JobDetailID] FROM [RunDetails] WHERE [RunDetailID] = @RunDetailID SELECT [OrderedRecords].[NewSeq9], RIGHT([OrderedRecords].[NewSeq9], 4) FROM ( SELECT [Records].*, [Records].[SortField] + RIGHT('0000' + CAST(ROW_NUMBER() OVER(PARTITION BY [Records].[SortField] ORDER BY [Records].[RunDetailID], [Records].[SortField], [Records].[PieceID]) AS VARCHAR), 4) NewSeq9 …

3
SQLITE: ปัญหาของแท็กและผลิตภัณฑ์
ฉันกำลังค้นหาวิธีในการสร้างแบบสอบถามเพื่อทำสิ่งต่อไปนี้: ลองพิจารณา 3 ตาราง: ผลิตภัณฑ์: รายชื่อผลิตภัณฑ์ แท็ก: รายการของแท็ก tag_ties: ตารางที่ใช้เชื่อมโยงแท็กกับผลิตภัณฑ์ ลองพิจารณาโครงสร้างนี้สำหรับแต่ละตาราง: ผลิตภัณฑ์: id (int, autoincrement) ชื่อ (varchar ชื่อของผลิตภัณฑ์) Tags: id (การสร้างอัตโนมัติภายใน) ป้ายกำกับ (varchar ป้ายกำกับของแท็ก) Tag_ties: id (int, autoincrement) tag_id (int หมายถึง id แท็ก) ref_id (int หมายถึงรหัสผลิตภัณฑ์) สิ่งที่ฉันต้องการ: รับผลิตภัณฑ์ทั้งหมดที่ติดแท็กด้วยแท็ก id 10, 11 และ 12 เช่น แบบสอบถามนี้ไม่ทำงานเนื่องจากจะส่งคืนผลิตภัณฑ์ที่มีแท็กอย่างน้อยหนึ่งรายการ: select p.name as name, p.id …
10 query  sqlite  subquery 

3
แบบสอบถาม PostgreSQL ช้ามากเมื่อเพิ่มแบบสอบถามย่อย
ฉันมีแบบสอบถามที่ค่อนข้างง่ายในตารางที่มีแถว 1.5M: SELECT mtid FROM publication WHERE mtid IN (9762715) OR last_modifier=21321 LIMIT 5000; EXPLAIN ANALYZE เอาท์พุท: Limit (cost=8.84..12.86 rows=1 width=8) (actual time=0.985..0.986 rows=1 loops=1) -> Bitmap Heap Scan on publication (cost=8.84..12.86 rows=1 width=8) (actual time=0.984..0.985 rows=1 loops=1) Recheck Cond: ((mtid = 9762715) OR (last_modifier = 21321)) -> BitmapOr (cost=8.84..8.84 …

1
MySQL: เพิ่มประสิทธิภาพยูเนี่ยนด้วย“ ORDER BY” ในการค้นหาภายใน
ฉันเพิ่งตั้งค่าระบบบันทึกซึ่งประกอบด้วยหลายตารางที่มีเค้าโครงเดียวกัน มีตารางหนึ่งตารางสำหรับแหล่งข้อมูลแต่ละแหล่ง สำหรับโปรแกรมดูบันทึกฉันต้องการ ยูเนี่ยนทุกตารางบันทึก , กรองพวกเขาโดยการบัญชี , เพิ่มคอลัมน์หลอกสำหรับการระบุแหล่งที่มา เรียงพวกเขาโดยเวลา , และจำกัด พวกเขาสำหรับการแบ่งหน้า ตารางทั้งหมดมีเขตข้อมูลที่เรียกzeitpunktว่าเป็นคอลัมน์วันที่ / เวลาที่จัดทำดัชนี ความพยายามครั้งแรกของฉันคือ: (SELECT l.id, l.account_id, l.vnum, l.count, l.preis, l.zeitpunkt AS zeit, 'hp' AS source FROM is_log AS l WHERE l.account_id = 730) UNION (SELECT l.id, l.account_id, l.vnum, l.count, l.preis, l.zeitpunkt, 'ig' AS source FROM ig_is_log AS …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.