ตัวเลือกสำหรับคำสั่ง ORDER BY ในมุมมองคืออะไร


12

คำถามนี้ต้องอยู่ในเว็บไซต์นี้ :)

ORDER BY ถูกห้ามไม่ให้ใช้ในมุมมองตามที่ฉันเข้าใจเนื่องจากความเป็นไปได้ในการสั่งซื้อหลายครั้งด้วยเมื่อใช้มุมมองนี้

ฉันรู้ว่ามีวิธีการข้ามข้อ จำกัด นี้ตัวอย่างเช่นTOP 99.999999 PERCENTแต่ฉันอยากจะรู้ว่าอะไรคือวิธีปฏิบัติที่ดีที่สุดไม่ใช่วิธีที่จะแฮ็ก

ดังนั้นถ้าฉันต้องการสร้างมุมมองในฐานข้อมูลของฉันสำหรับใช้ส่วนตัวหมายถึงฉันต้องการเชื่อมต่อกับฐานข้อมูลและดูข้อมูลที่ได้รับการแก้ไขและเรียงลำดับฉันจะทำอย่างไรถ้าฉันไม่สามารถสั่งซื้อมุมมองได้?

ขณะนี้ใน SQL Server DB ของฉันฉันมีมุมมองกับการTOPแฮ็กและฉันใช้มันเยอะ แต่ก็รู้สึกผิด


1
ทำไมไม่ 100% สูงสุด
garik

@garik - เพราะมันยังไม่รับประกันการสั่งซื้อถ้าฉันเข้าใจลิงก์ของ gbn อย่างถูกต้อง มันเป็นเพียงคำตอบที่ไม่รัดกุมมากขึ้น
แจ็คบอกว่าลอง topanswers.xyz

1
@ แจ็คดักลาสมันไม่ได้เป็นคำตอบมันเป็นความคิดเห็นเกี่ยวกับ 99.999 ด้านบน ...
garik

@garik - ใน SQL Server 2008 TOP 100 PERCENT จะถูกละเว้นและใช้เพียง 99 เท่านั้นที่ทำงานได้ ฉันคิดว่ามันได้รับการแก้ไขแล้ว แต่เวอร์ชันของฉันไม่ได้รับการปรับปรุง
yellowblood

1
นี่ไม่ใช่ข้อ จำกัด ทางเทคนิค นี่คือโดยการออกแบบ นั่นเป็นเหตุผลที่การแก้ปัญหาใด ๆ รู้สึกเหมือนแฮ็ค กำหนดการสั่งซื้อของคุณในแบบสอบถามกับมุมมอง คำสั่งซื้อนั้นใช้กับชุดผลลัพธ์ (เอาต์พุตคิวรี e.ge) ไม่ใช่การรวบรวมข้อมูล (เช่นมุมมองหรือตาราง)
Nick Chammas

คำตอบ:


2

ไม่มีสิ่งใดในมุมมอง "สั่ง" เนื่องจากมุมมองควรเป็นชุดของแถว ใช้ขั้นตอนการจัดเก็บถ้าคุณต้องการการสั่งซื้อคงที่


นี่คือคำตอบที่อธิบายว่าทำไมคุณไม่สามารถสั่งซื้อสินค้าภายในนิยามมุมมอง ชุดตามคำนิยามไม่มีคำสั่งซื้อ เมื่อคุณรวมเข้าTOPด้วยกันORDER BYตอนนี้คุณกำลังกำหนดชุดใหม่เนื่องจากการเรียงลำดับมีผลต่อแถวที่ "สูงสุด"; นี่คือเหตุผลที่TOPทำให้คุณสามารถใช้ORDER BYในการกำหนดมุมมอง
Nick Chammas

9

เฉพาะคำสั่งซื้อที่อยู่นอกสุดเท่านั้นที่จะรับประกันการสั่งซื้อ

  • ORDER BY ระดับกลางหรือภายในจะถูกละเว้น
    ซึ่งรวมถึง ORDER BY ในมุมมอง
  • ไม่มีคำสั่งโดยนัยในตารางใด ๆ
  • ไม่มีคำสั่งโดยนัยจากดัชนีใด ๆ (ทำคลัสเตอร์หรือไม่) บนตารางนั้น

การเชื่อมโยง

ORDER BY รับประกันผลลัพธ์ที่เรียงลำดับแล้วสำหรับคำสั่ง SELECT ที่อยู่นอกสุดของแบบสอบถาม ตัวอย่างเช่นพิจารณาคำจำกัดความมุมมองต่อไปนี้: (และตัวอย่างตามที่ตรงกับคำถามนี้)


ขอบคุณสำหรับความกระจ่าง แต่มันไม่ใช่คำตอบที่ฉันกำลังมองหา :) ฉันพยายามที่จะดูว่ามีทางเลือกอะไรบ้างสำหรับการสั่งซื้อที่สะดวกมากในมุมมอง
yellowblood

3

เพิ่ม ORDER BY ไปยังเอาต์พุตของมุมมองเช่น

  SELECT whatever FROM MYVIEW ORDER BY whatever

1
ไม่มีคำสั่งโดยนัยโดยดัชนีคลัสเตอร์ -1
gbn

@SqlACID - แก้ไขได้ดี +1 แทน -1 :)
แจ็คบอกว่าลอง topanswers.xyz

ซึ่งหมายความว่าคุณจำเป็นต้องเขียนคำสั่งซื้อใหม่อีกครั้งด้วยข้อทุกครั้งที่คุณค้นหามุมมองซึ่งเป็นสิ่งที่เราพยายามหลีกเลี่ยงเมื่อเราใช้คำสั่งซื้อโดยภายในมุมมอง
yellowblood

ดังที่ dportas กล่าวว่า wrapper ของ proc ที่เก็บไว้รอบ ๆ ข้อความค้นหาจะทำงานได้ แต่อาจไม่ใช่สิ่งที่คุณกำลังมองหา
SqlACID

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