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

Structured Query Language (SQL) เป็นภาษาสำหรับการสืบค้นฐานข้อมูล คำถามควรมีตัวอย่างรหัสโครงสร้างตารางข้อมูลตัวอย่างและแท็กสำหรับการใช้งาน DBMS (เช่น MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2 และอื่น ๆ ) หากคำถามของคุณเกี่ยวข้องกับ DBMS เฉพาะ (ใช้ส่วนขยาย / คุณลักษณะเฉพาะ) ให้ใช้แท็กของ DBMS นั้นแทน คำตอบของคำถามที่ติดแท็กด้วย SQL ควรใช้ SQL มาตรฐาน ISO / IEC

2
วิธีแทรกหลายแถวจากแบบสอบถามเดียวโดยใช้คำพูดที่ไพเราะ / คล่องแคล่ว
ฉันมีคำถามต่อไปนี้: $query = UserSubject::where('user_id', Auth::id())->select('subject_id')->get(); และตามที่คาดไว้ฉันได้รับผลลัพธ์ดังต่อไปนี้: [{"user_id":8,"subject_id":9},{"user_id":8,"subject_id":2}] มีวิธีคัดลอกผลลัพธ์ข้างต้นไปยังตารางอื่นเพื่อให้ตารางของฉันมีลักษณะเช่นนี้หรือไม่? ID|user_id|subject_id 1 |8 |9 2 |8 |2 ปัญหาที่ฉันมีคือ$queryสามารถคาดหวังจำนวนแถวใด ๆ และฉันไม่แน่ใจว่าจะวนซ้ำผ่านจำนวนแถวที่ไม่รู้จักได้อย่างไร
150 php  sql  laravel  eloquent 

9
Foreign Key ปรับปรุงประสิทธิภาพการค้นหาหรือไม่
สมมติว่าฉันมี 2 ตารางผลิตภัณฑ์และหมวดหมู่สินค้า ทั้งสองตารางมีความสัมพันธ์กับ CategoryId และนี่คือแบบสอบถาม SELECT p.ProductId, p.Name, c.CategoryId, c.Name AS Category FROM Products p INNER JOIN ProductCategories c ON p.CategoryId = c.CategoryId WHERE c.CategoryId = 1; เมื่อฉันสร้างแผนการดำเนินการ ProductCategories ตารางทำการค้นหาดัชนีคลัสเตอร์ซึ่งเป็นไปตามที่คาดหวัง แต่สำหรับผลิตภัณฑ์ในตารางจะทำการสแกนดัชนีคลัสเตอร์ซึ่งทำให้ฉันสงสัย เหตุใด FK จึงไม่ช่วยปรับปรุงประสิทธิภาพการสืบค้น ดังนั้นฉันต้องสร้างดัชนีบน Products.CategoryId เมื่อฉันสร้างแผนการดำเนินการอีกครั้งทั้งสองตารางทำการค้นหาดัชนี และค่าใช้จ่ายทรีย่อยโดยประมาณจะลดลงมาก คำถามของฉันคือ: นอกจาก FK จะช่วยจำกัดความสัมพันธ์แล้วยังมีประโยชน์อื่นอีกไหม? ปรับปรุงประสิทธิภาพการสืบค้นหรือไม่ ฉันควรสร้างดัชนีในคอลัมน์ FK ทั้งหมด (ไลค์ผลิตภัณฑ์ Products.CategoryId) ในตารางทั้งหมดหรือไม่

3
วิธีตรวจสอบว่ามีตารางอยู่ในสคีมาที่กำหนดหรือไม่
Postgres 8.4 และฐานข้อมูลที่สูงกว่ามีตารางทั่วไปในpublicสคีมาและตารางเฉพาะ บริษัท ในcompanyสคีมา companyชื่อสคีมามักเริ่มต้นด้วย'company'และลงท้ายด้วยหมายเลข บริษัท ดังนั้นอาจมีสกีมาเช่น: public company1 company2 company3 ... companynn แอปพลิเคชันจะทำงานกับ บริษัท เดียวเสมอ ระบุไว้ตามใน ODBC หรือสตริงการเชื่อมต่อ npgsql เช่น:search_path search_path='company3,public' คุณจะตรวจสอบว่าตารางที่กำหนดนั้นมีอยู่ในcompanynสคีมาที่ระบุได้อย่างไร เช่น: select isSpecific('company3','tablenotincompany3schema') ควรกลับมาfalseและ select isSpecific('company3','tableincompany3schema') trueควรกลับ ในกรณีใด ๆ ฟังก์ชันควรตรวจสอบเฉพาะcompanynสคีมาที่ผ่านไม่ใช่สคีมาอื่น ๆ ถ้าตารางที่กำหนดมีอยู่ทั้งในและสคีผ่านฟังก์ชั่นควรกลับpublic ควรใช้กับ Postgres 8.4 หรือใหม่กว่าtrue

6
วิธีใช้ RETURNING ด้วย ON CONFLICT ใน PostgreSQL
ฉันมี UPSERT ต่อไปนี้ใน PostgreSQL 9.5: INSERT INTO chats ("user", "contact", "name") VALUES ($1, $2, $3), ($2, $1, NULL) ON CONFLICT("user", "contact") DO NOTHING RETURNING id; หากไม่มีข้อขัดแย้งมันจะคืนค่าดังนี้: ---------- | id | ---------- 1 | 50 | ---------- 2 | 51 | ---------- แต่ถ้ามีข้อขัดแย้งมันจะไม่ส่งคืนแถวใด ๆ : ---------- | id | ---------- ฉันต้องการส่งคืนidคอลัมน์ใหม่หากไม่มีความขัดแย้งหรือส่งคืนidคอลัมน์ที่มีอยู่ของคอลัมน์ที่ขัดแย้งกัน …

4
เพิ่มข้อ จำกัด ที่ไม่ซ้ำกันในการรวมสองคอลัมน์
ฉันมีโต๊ะแล้วบุคคลคนเดียวกันก็เข้ามาในPersonโต๊ะของฉันสองครั้ง ตอนนี้คีย์หลักเป็นเพียงตัวเลขอัตโนมัติ แต่มีอีกสองฟิลด์ที่ฉันต้องการบังคับให้เป็นเอกลักษณ์ ตัวอย่างเช่นฟิลด์คือ: ID Name Active PersonNumber ฉันต้องการเพียง 1 ระเบียนที่มี PersonNumber และ Active = 1 ที่ไม่ซ้ำกัน (ดังนั้นการรวมกันของทั้งสองฟิลด์จะต้องไม่ซ้ำกัน) เป็นวิธีที่ดีที่สุดในตารางที่มีอยู่ในเซิร์ฟเวอร์ SQL ที่ฉันสามารถทำได้ดังนั้นถ้าใครแทรกมีค่าเดียวกันกับค่าที่มีอยู่มันล้มเหลวดังนั้นฉันไม่ต้องกังวลเกี่ยวกับเรื่องนี้ในรหัสแอปพลิเคชันของฉัน
149 sql  sql-server 

6
LINQ ไปยัง SQL - Left Outer Join พร้อมกับเงื่อนไขการเข้าร่วมหลายแบบ
ฉันมี SQL ต่อไปนี้ซึ่งฉันพยายามจะแปลเป็น LINQ: SELECT f.value FROM period as p LEFT OUTER JOIN facts AS f ON p.id = f.periodid AND f.otherid = 17 WHERE p.companyid = 100 ฉันเห็นการใช้งานโดยทั่วไปของการเข้าร่วมด้านนอกด้านซ้าย (เช่น. into x from y in x.DefaultIfEmpty()ฯลฯ ) แต่ฉันไม่แน่ใจว่าจะแนะนำเงื่อนไขการเข้าร่วมอื่น ๆ ได้อย่างไร ( AND f.otherid = 17) แก้ไข ทำไมAND f.otherid = 17ส่วนเงื่อนไขของ …
148 c#  sql  linq  linq-to-sql  outer-join 

10
วิธีรับวันและเวลาปัจจุบันใน MySQL
มีค่าหรือคำสั่งเช่น DATETIME ที่ฉันสามารถใช้ในแบบสอบถามแบบแมนนวลเพื่อแทรกวันที่และเวลาปัจจุบันหรือไม่ INSERT INTO servers ( server_name, online_status, exchange, disk_space, network_shares ) VALUES( 'm1', 'ONLINE', 'ONLINE', '100GB', 'ONLINE' 'DATETIME' ) ค่า DATETIME ที่ยกมาในตอนท้ายเป็นที่ที่ฉันต้องการเพิ่มวันที่และเวลาปัจจุบัน
148 mysql  sql  datetime 

13
แบบสอบถามการทดสอบ SQL ที่มีประสิทธิภาพหรือแบบสอบถามการตรวจสอบที่จะทำงานในฐานข้อมูล (หรือส่วนใหญ่) ทั้งหมด
ไลบรารีการรวมการเชื่อมต่อฐานข้อมูลจำนวนมากให้ความสามารถในการทดสอบการเชื่อมต่อ SQL ของพวกเขาเพื่อความเกียจคร้าน ตัวอย่างเช่น JDBC pooling library c3p0มีคุณสมบัติที่เรียกว่าpreferredTestQueryซึ่งถูกเรียกใช้งานบนการเชื่อมต่อตามช่วงเวลาที่กำหนดไว้ ในทำนองเดียวกัน Apache Commons DBCP validationQueryมี แบบสอบถามตัวอย่าง จำนวนมากที่ฉันเห็นนั้นใช้สำหรับ MySQL และแนะนำให้ใช้เป็นค่าสำหรับแบบสอบถามทดสอบ อย่างไรก็ตามแบบสอบถามนี้ใช้ไม่ได้กับบางฐานข้อมูล (เช่น HSQLDB ซึ่งคาดว่าจะมีส่วนคำสั่ง)SELECT 1;SELECT 1FROM มีแบบสอบถามแบบไม่เชื่อเรื่องพระเจ้าที่มีประสิทธิภาพเท่าเทียมกัน แต่จะใช้ได้กับฐานข้อมูล SQL ทั้งหมดหรือไม่ แก้ไข: หากไม่มี (ซึ่งน่าจะเป็นกรณีนี้) ใครสามารถแนะนำชุดของแบบสอบถาม SQL ที่จะทำงานกับผู้ให้บริการฐานข้อมูลต่างๆได้หรือไม่ ความตั้งใจของฉันคือการกำหนดโปรแกรมที่ฉันสามารถใช้ตามการกำหนดค่าผู้ให้บริการฐานข้อมูลของฉันโดยทางโปรแกรม

5
วิธีการแทรกแบทช์ใน MySQL
ฉันมีบันทึกจำนวน 1 รายการที่ต้องป้อนลงในตาราง วิธีที่ดีที่สุดในการทำแบบสอบถามคืออะไร? ฉันควรทำวนรอบและแทรกหนึ่งระเบียนต่อการวนซ้ำหรือไม่ หรือมีวิธีที่ดีกว่า
148 mysql  sql  database  insert 

30
จะสร้างช่วงของตัวเลขระหว่างตัวเลขสองตัวได้อย่างไร?
ฉันมีตัวเลขสองตัวเป็นอินพุตจากผู้ใช้เช่น 1000และ1050. ฉันจะสร้างตัวเลขระหว่างสองตัวเลขนี้โดยใช้แบบสอบถาม sql ในแถวแยกกันได้อย่างไร ฉันต้องการสิ่งนี้: 1000 1001 1002 1003 . . 1050

8
ORA-00979 ไม่ใช่กลุ่มโดยการแสดงออก
ฉันได้รับ ORA-00979 ด้วยแบบสอบถามต่อไปนี้: SELECT cr.review_sk, cr.cs_sk, cr.full_name, tolist(to_char(cf.fact_date, 'mm/dd/yyyy')) "appt", cs.cs_id, cr.tracking_number from review cr, cs, fact cf where cr.cs_sk = cs.cs_sk and UPPER(cs.cs_id) like '%' || UPPER(i_cs_id) || '%' and row_delete_date_time is null and cr.review_sk = cf.review_wk (+) and cr.fact_type_code (+) = 183050 GROUP BY cr.review_sk, cr.cs_sk, cf.fact_date, cr.tracking_number …
147 sql  oracle  ora-00979 

4
ได้รับอนุญาตให้ดำเนินการทุกขั้นตอนการจัดเก็บ
คำสั่งต่อไปนี้ให้สิทธิ์ผู้ใช้ "MyUser" แก่ผู้ใช้เพื่อเรียกใช้โพรซีเดอร์ที่เก็บไว้ทั้งหมดในฐานข้อมูลหรือไม่ GRANT EXECUTE TO [MyDomain\MyUser]

13
ลบ Trailing Spaces และอัพเดตในคอลัมน์ใน SQL Server
ฉันมีช่องว่างต่อท้ายในคอลัมน์ในตาราง SQL Server Company Nameเรียกว่า ข้อมูลทั้งหมดในคอลัมน์นี้มีช่องว่างต่อท้าย ฉันต้องการลบสิ่งเหล่านี้ทั้งหมดและต้องการมีข้อมูลโดยไม่มีช่องว่างต่อท้าย ชื่อ บริษัท เป็นเหมือน "Amit Tech Corp " ฉันต้องการชื่อ บริษัท "Amit Tech Corp"

12
SQL Switch / Case ในอนุประโยค 'where'
ฉันพยายามค้นหารอบ ๆ แต่ไม่พบสิ่งที่จะช่วยฉันได้ ฉันกำลังพยายามทำสิ่งนี้ใน SQL: declare @locationType varchar(50); declare @locationID int; SELECT column1, column2 FROM viewWhatever WHERE CASE @locationType WHEN 'location' THEN account_location = @locationID WHEN 'area' THEN xxx_location_area = @locationID WHEN 'division' THEN xxx_location_division = @locationID ฉันรู้ว่าฉันไม่ควรใส่ '= @locationID' ต่อท้ายแต่ละอัน แต่ฉันไม่สามารถรับไวยากรณ์ได้ใกล้เคียงกับความถูกต้อง SQL ยังคงบ่นเกี่ยวกับ '=' ของฉันในบรรทัดแรกเมื่อ ... ฉันจะทำเช่นนี้ได้อย่างไร?

18
แสดงรายการลำดับทั้งหมดใน Postgres db 8.1 ด้วย SQL
ฉันแปลง db จาก postgres เป็น mysql เนื่องจากฉันไม่สามารถหาเครื่องมือที่หลอกลวงได้ฉันจะเปลี่ยนลำดับ postgres ทั้งหมดเป็น autoincrement id ใน mysql ด้วยค่า autoincrement ดังนั้นฉันจะแสดงรายการลำดับทั้งหมดในPostgres DB ( เวอร์ชัน8.1 ) ด้วยข้อมูลเกี่ยวกับตารางที่ใช้ค่าอื่น ๆ ถัดไปที่มีคิวรี่ SQL ได้อย่างไร ระวังว่าฉันไม่สามารถใช้information_schema.sequencesมุมมองในรีลีส 8.4

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