ทำไมบางคนจะใช้ WHERE 1 = 1 AND <conditions> ในประโยค SQL?


257

เหตุใดจึงมีคนใช้WHERE 1=1 AND <conditions>ในประโยค SQL (ทั้ง SQL ที่ได้รับผ่านสตริงที่ต่อกัน, นิยามมุมมองทั้งสอง)

ฉันเคยเห็นที่ไหนสักแห่งว่าสิ่งนี้จะถูกใช้เพื่อป้องกันการฉีด SQL แต่มันดูแปลกมาก

หากมีการฉีดจะมีผลเช่นเดียวกับWHERE 1 = 1 AND injected OR 1=1injected OR 1=1

แก้ไขในภายหลัง: แล้วการใช้งานในนิยามมุมมองล่ะ


ขอบคุณสำหรับคำตอบ

ถึงกระนั้นฉันก็ยังไม่เข้าใจว่าทำไมบางคนถึงใช้โครงสร้างนี้เพื่อกำหนดมุมมองหรือใช้ภายในขั้นตอนการจัดเก็บ

ยกตัวอย่างเช่น

CREATE VIEW vTest AS
SELECT FROM Table WHERE 1=1 AND table.Field=Value

3
"ทำไมบางคนถึงใช้สิ่งก่อสร้างนี้เพื่อกำหนดมุมมอง"อาจเป็นเพราะนิสัย มันไม่มีข้อได้เปรียบในการทำงานในการค้นหาแบบคงที่
ADTC

คำตอบ:


346

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

and <condition>

และต่อเข้าด้วยกัน ด้วยการ1=1ที่เริ่มต้นเริ่มต้นandมีบางสิ่งบางอย่างที่จะเชื่อมโยงกับ

ฉันไม่เคยเห็นสิ่งนี้ใช้สำหรับการป้องกันการฉีดทุกชนิดอย่างที่คุณบอกว่ามันดูเหมือนจะไม่ช่วยอะไรมากมาย ฉันได้เห็นมันใช้เป็นความสะดวกสบายในการดำเนินงาน เอ็นจินการสืบค้น SQL จะสิ้นสุดการละเว้น1=1ดังนั้นจึงไม่ควรส่งผลกระทบต่อประสิทธิภาพ


34
บางครั้งไม่เกี่ยวกับการขี้เกียจ แต่มีรหัสที่สะอาดกว่า
Eduardo Molteni

39
การจัดการกับการต่อท้าย ANDs หรือ COMMA ไม่สกปรก ... ไม่มีสิ่งใดสะอาดกว่าโดยมี 1 = 1 อยู่ทั่ว SQL ของคุณ

21
DBAs? สิ่งที่พวกเขาสำหรับ? :)
Eduardo Molteni

38
DBA อยู่ที่นั่นเพื่อล้างข้อมูลหลังจากโปรแกรมเมอร์ที่คิดว่าพวกเขารู้วิธีใช้ฐานข้อมูลอย่างมีประสิทธิภาพ
Adrian Pronk

23
"ขี้เกียจ"ฉันชอบคิดว่ามันฉลาดไม่ขี้เกียจ คุณกำลังหลีกเลี่ยงรหัสซ้ำและการตรวจสอบเงื่อนไขที่ไม่จำเป็น โดยไม่สามารถเพิ่มwhere 1=1(Oracle) หรือwhere true(Postgres) ฉันจะต้องตรวจสอบแต่ละเงื่อนไขว่าเป็นเงื่อนไขแรกหรือไม่ ไม่มีจุดในการทำเช่นนั้นและจะเพิ่มรหัสสำเร็จรูปมากกว่าเท่านั้น
ADTC

113

เพียงแค่เพิ่มโค้ดตัวอย่างในคำตอบของ Greg:

dim sqlstmt as new StringBuilder
sqlstmt.add("SELECT * FROM Products")
sqlstmt.add(" WHERE 1=1") 

''// From now on you don't have to worry if you must 
''// append AND or WHERE because you know the WHERE is there
If ProductCategoryID <> 0 then
  sqlstmt.AppendFormat(" AND ProductCategoryID = {0}", trim(ProductCategoryID))
end if
If MinimunPrice > 0 then
  sqlstmt.AppendFormat(" AND Price >= {0}", trim(MinimunPrice))
end if

6
บิตแฮ็ค แต่ดูเหมือนว่าการใช้งานที่ถูกต้อง
Mike

5
นี่ควรเป็นคำตอบที่ยอมรับได้ การฝึกฝนเป็นเพียงการแฮกไปมาโดยไม่จำเป็นต้องกำหนดจำนวนเงื่อนไขที่คุณมี
aglassman

38

ฉันเคยเห็นมันใช้เมื่อจำนวนเงื่อนไขสามารถแปรผัน

คุณสามารถต่อเงื่อนไขเข้าด้วยกันโดยใช้สตริง "AND" จากนั้นแทนที่จะนับจำนวนเงื่อนไขที่คุณส่งผ่านคุณวาง "WHERE 1 = 1" ที่ส่วนท้ายของคำสั่ง SQL หุ้นของคุณและโยนลงบนเงื่อนไขที่ต่อกัน

โดยทั่วไปจะช่วยให้คุณไม่ต้องทำการทดสอบเงื่อนไขแล้วเพิ่มสตริง "ตำแหน่ง" ไว้ข้างหน้า


28

ดูเหมือนเป็นวิธีขี้เกียจที่จะรู้อยู่เสมอว่าประโยค WHERE ของคุณถูกกำหนดไว้แล้วและอนุญาตให้คุณเพิ่มเงื่อนไขโดยไม่ต้องตรวจสอบว่ามันเป็นประโยคแรก


12
"ขี้เกียจ"ฉันชอบคิดว่ามันฉลาดไม่ขี้เกียจ คุณกำลังหลีกเลี่ยงรหัสซ้ำและการตรวจสอบเงื่อนไขที่ไม่จำเป็น โดยไม่สามารถเพิ่มwhere 1=1(Oracle) หรือwhere true(Postgres) ฉันจะต้องตรวจสอบแต่ละเงื่อนไขว่าเป็นเงื่อนไขแรกหรือไม่ ไม่มีจุดในการทำเช่นนั้นและจะเพิ่มรหัสสำเร็จรูปมากกว่าเท่านั้น
ADTC

2
@ADTC เขียนรหัสมัก - ถ้าไม่ใช่ส่วนใหญ่ - เกี่ยวกับการจัดการเงื่อนไขต่าง นี่เป็นเพียงอีกเงื่อนไขหนึ่งที่ต้องได้รับการจัดการซึ่งโดยส่วนตัวผมคิดว่าเป็นเรื่องขี้เกียจที่จะสร้างมลภาวะด้วย SQL หากคุณออกแบบรหัสของคุณเพื่อเพิ่ม 'Where 1 = 1' ในที่เดียวคุณสามารถทำได้โดยใช้ความพยายามเล็กน้อย - จัดการความแตกต่างระหว่างศูนย์และเงื่อนไขต่างๆในที่เดียวในรหัสของคุณ แม้ว่าการคาดเดาของฉันคือผู้สนับสนุน 'Where 1 = 1' โปรยมันตลอด codebase ของพวกเขาซึ่งนำฉันไปสู่ข้อสรุปความขี้เกียจสายพันธุ์ความเกียจคร้าน
Jason S

@ JasonS Laziness เป็นบิดาแห่งการประดิษฐ์
ADTC

@ADTC ฉันขี้เกียจเพราะฉันไม่ชอบที่จะอัปเดตรหัสในหลายร้อยแห่งดังนั้นการประดิษฐ์จึงวางไว้ในที่เดียว ให้ฉันWHERE 1=1ปรับปรุงการทำงานของการบำรุงรักษารหัสเดียวกันในหลาย ๆ สถานที่และอ่านมันใน SQL ที่คุณสร้างขึ้นทั้งหมด ฉันขี้เกียจมากกว่าที่ฉันคิด!
Jason S

19

ความเกี่ยวข้องทางอ้อม: เมื่อใช้ 1 = 2:

CREATE TABLE New_table_name 
as 
select * 
FROM Old_table_name 
WHERE 1 = 2;

สิ่งนี้จะสร้างตารางใหม่ที่มีสคีมาเหมือนกับตารางเก่า (มีประโยชน์มากถ้าคุณต้องการโหลดข้อมูลเพื่อเปรียบเทียบ)


3
ลืมที่จะเพิ่มในขณะที่มันจะสร้างตารางใหม่ที่มีข้อมูลเช่นเดียวกับเก่าตารางใหม่เคยชินมีข้อ จำกัด อื่น ๆ เช่นต่างประเทศที่สำคัญจากตารางเก่า
milso

16

1 = 1 การแสดงออกมักใช้ในรหัส sql ที่สร้างขึ้น การแสดงออกนี้สามารถลดความซับซ้อนของการสร้างรหัส sql ลดจำนวนคำสั่งตามเงื่อนไข


11

จริงๆแล้วฉันเห็นสิ่งต่าง ๆ ที่ใช้ในรายงาน BIRT แบบสอบถามที่ส่งผ่านไปยังรันไทม์ BIRT นั้นมีรูปแบบดังนี้

select a,b,c from t where a = ?

และ '?' จะถูกแทนที่ที่รันไทม์โดยค่าพารามิเตอร์จริงที่เลือกจากกล่องแบบหล่นลง ตัวเลือกในเมนูแบบเลื่อนลงได้รับจาก:

select distinct a from t
union all
select '*' from sysibm.sysdummy1

เพื่อให้คุณได้รับค่าที่เป็นไปได้ทั้งหมดรวมถึง " *" หากผู้ใช้เลือก "* " จากช่องแบบเลื่อนลง (หมายถึงควรเลือกค่าทั้งหมดของ a) คุณจะต้องแก้ไขแบบสอบถาม (โดย Javascript) ก่อนเรียกใช้

ตั้งแต่ "?" เป็นพารามิเตอร์ตำแหน่งและต้องอยู่ที่นั่นเพื่อให้สิ่งอื่น ๆ ใช้งานได้จาวาสคริปต์จะปรับเปลี่ยนแบบสอบถามให้เป็น:

select a,b,c from t where ((a = ?) or (1==1))

โดยทั่วไปจะลบผลกระทบของส่วนคำสั่งในขณะที่ยังคงออกจากพารามิเตอร์ตำแหน่งในสถานที่

ฉันยังเห็นกรณีและใช้โดยขี้เกียจ coders ในขณะที่สร้างแบบสอบถาม SQL แบบไดนามิก

สมมติว่าคุณต้องสร้างแบบสอบถามที่เริ่มต้นด้วยselect * from tและตรวจสอบแบบไดนามิก:

  • ชื่อคือบ๊อบ; และ
  • เงินเดือนคือ> $ 20,000

บางคนจะเพิ่มคนแรกด้วย WHERE และคนที่ตามมาด้วยและดังนี้:

select * from t where name = 'Bob' and salary > 20000

โปรแกรมเมอร์ขี้เกียจ (และนั่นไม่จำเป็นต้องเป็นลักษณะที่ไม่ดี ) จะไม่แยกความแตกต่างระหว่างเงื่อนไขที่เพิ่มเข้ามาพวกเขาจะเริ่มต้นด้วยselect * from t where 1=1และเพียงแค่เพิ่มและส่วนคำสั่งหลังจากนั้น

select * from t where 1=1 and name = 'Bob' and salary > 20000

1
"ขี้เกียจ"ฉันชอบคิดว่ามันฉลาดไม่ขี้เกียจ คุณกำลังหลีกเลี่ยงรหัสซ้ำและการตรวจสอบเงื่อนไขที่ไม่จำเป็น โดยไม่สามารถเพิ่มwhere 1=1(Oracle) หรือwhere true(Postgres) ฉันจะต้องตรวจสอบแต่ละเงื่อนไขว่าเป็นเงื่อนไขแรกหรือไม่ ไม่มีจุดในการทำเช่นนั้นและจะเพิ่มรหัสสำเร็จรูปมากกว่าเท่านั้น
ADTC

1
@ADTC ฉันไม่ได้ขี้เกียจในทางที่ไม่ดี อันที่จริงสันหลังยาวเป็นลักษณะที่ดีในการเขียนโปรแกรม :-) ฉันจะอธิบาย
paxdiablo

ความเกียจคร้านเป็นรากฐานของความชั่วร้ายทั้งหมด
Ivanzinho

11

ฉันพบว่ามีประโยชน์กับรูปแบบนี้เมื่อฉันกำลังทดสอบหรือตรวจสอบซ้ำสองครั้งในฐานข้อมูลดังนั้นฉันสามารถแสดงความคิดเห็นได้อย่างรวดเร็วเงื่อนไขอื่น ๆ :

CREATE VIEW vTest AS
SELECT FROM Table WHERE 1=1 
AND Table.Field=Value
AND Table.IsValid=true

กลายเป็น:

CREATE VIEW vTest AS
SELECT FROM Table WHERE 1=1 
--AND Table.Field=Value
--AND Table.IsValid=true

10

โดยที่ 1 = 0 สิ่งนี้จะทำเพื่อตรวจสอบว่าตารางที่มีอยู่ ไม่ทราบสาเหตุที่ใช้ 1 = 1


1
การกระทำนี้ใช้เพื่อส่งคืนชุดผลลัพธ์เปล่าจากฐานข้อมูลเพื่อใช้เป็นผู้ถือสำหรับบันทึกใหม่
Gary Kindel

6

ในขณะที่ฉันเห็นว่า 1 = 1 จะเป็นประโยชน์สำหรับ SQL ที่สร้างขึ้น แต่เทคนิคที่ฉันใช้ใน PHP คือการสร้างอาร์เรย์ของคำสั่งและจากนั้นทำ

implode (" AND ", $clauses);

จึงหลีกเลี่ยงปัญหาการมีผู้นำหรือตามและ เห็นได้ชัดว่าสิ่งนี้มีประโยชน์ก็ต่อเมื่อคุณรู้ว่าคุณจะมีประโยคอย่างน้อยหนึ่งข้อ!


1
นั่นคือสิ่งที่ 1 = 1 เข้ามามันให้คุณว่า "ประโยคอย่างน้อยหนึ่งประโยค" ดังนั้นคุณไม่ต้องกังวลกับการตบแค่ "AND abc"
Carl

ฉันชอบความคิดนี้! ดูที่นี่สำหรับตัวอย่างที่สมบูรณ์ยิ่งขึ้นstackoverflow.com/questions/35326160/…
drooh

5

นี่คือตัวอย่างที่เกี่ยวข้องอย่างใกล้ชิด: การใช้MERGEคำสั่งSQL เพื่ออัปเดตเป้าหมายดำน้ำโดยใช้ค่าทั้งหมดจากตารางต้นฉบับที่ไม่มีแอตทริบิวต์ทั่วไปที่จะเข้าร่วมเช่น

MERGE INTO Circles
   USING 
      (
        SELECT pi
         FROM Constants
      ) AS SourceTable
   ON 1 = 1
WHEN MATCHED THEN 
  UPDATE
     SET circumference = 2 * SourceTable.pi * radius;

5

ทำไมบางคนถึงใช้ WHERE 1 = 1 AND <proper conditions>

ฉันเคยเห็นกรอบการทำงานที่บ้านทำสิ่งเช่นนี้ ( หน้าแดง ) เนื่องจากจะช่วยให้การแยกวิเคราะห์แบบสันหลังยาวที่จะนำไปใช้กับคำหลักWHEREและANDSql

ตัวอย่างเช่น (ฉันใช้ C # เป็นตัวอย่างที่นี่) พิจารณาการแยกตามเงื่อนไขของเพรดิเคตต่อไปนี้ในแบบสอบถาม SQL string builder:

var sqlQuery = "SELECT * FROM FOOS WHERE 1 = 1"
if (shouldFilterForBars)
{
    sqlQuery = sqlQuery + " AND Bars > 3";
}
if (shouldFilterForBaz)
{
    sqlQuery = sqlQuery + " AND Baz < 12";
}

"ประโยชน์" ของWHERE 1 = 1วิธีการที่ไม่จำเป็นต้องใช้รหัสพิเศษ:

  • สำหรับAND - ไม่ว่าจะเป็นศูนย์ควรใช้เพรดิเคตหนึ่งอันหรือทั้งคู่ (บาร์และบาซ) ซึ่งจะเป็นตัวกำหนดว่าANDจำเป็นหรือไม่ เนื่องจากเรามีเพรดิเคตอย่างน้อยหนึ่งอัน1 = 1หมายความว่ามันใช้ได้ANDเสมอ
  • สำหรับเพรดิเคตเลย - ในกรณีที่มีเพรดิเคตเป็นศูนย์WHEREจะต้องทำการดร็อป แต่อีกครั้งเราอาจขี้เกียจเพราะเรารับประกันอีกครั้งอย่างน้อยหนึ่งภาคแสดง

เห็นได้ชัดว่าเป็นความคิดที่ไม่ดีและขอแนะนำให้ใช้กรอบการเข้าถึงข้อมูลที่กำหนดขึ้นหรือORMสำหรับการแยกวิเคราะห์ภาคส่วนทางเลือกและเงื่อนไขในลักษณะนี้


หรือถ้ากลิ้งของคุณเองที่สร้างประโยคควรอยู่ในที่เดียวในรหัสของคุณ จากนั้นคุณสามารถจัดการเพรดิเคตเป็นศูนย์หรือมากกว่าเพรดิเคตเป็นศูนย์ในที่เดียวในรหัสของคุณ ความสงสัยของฉันคือการมีอยู่ของWHERE 1=1เป็นตัวบ่งชี้ที่ยุติธรรมซึ่งไม่ใช่กรณีที่ฐานของรหัสจะเกลื่อนไปด้วยบิตของสตริงWHERE 1=1ซึ่งจะบ่งบอกว่าฉันมีปัญหาสถาปัตยกรรมแอปพลิเคชันและฉันจะเดาไม่เพียงคนเดียว!
Jason S

1
ที่จริงแล้วไม่มีอะไร "เลวร้าย" เกี่ยวกับความคิดน้อยกว่าความผิด "ชัดเจน" หรือ ORM เป็นวิธีที่เหมาะสมในทุกกรณี เรียนรู้ผู้คนเกี่ยวกับพีชคณิต SQL และเชิงสัมพันธ์ ...
Hejazzman

4

หากคุณมาที่นี่เพื่อค้นหาWHERE 1ทราบว่าWHERE 1และWHERE 1=1เหมือนกัน WHERE 1มีการใช้งานน้อยมากเพราะบางระบบฐานข้อมูลปฏิเสธการพิจารณาว่าWHERE 1ไม่ใช่บูลีน


2

สิ่งนี้มีประโยชน์ในกรณีที่คุณต้องใช้แบบสอบถามแบบไดนามิกซึ่งในส่วนคำสั่งที่คุณต้องผนวกตัวเลือกบางตัวกรอง เช่นถ้าคุณมีตัวเลือก 0 สำหรับสถานะไม่ได้ใช้งาน, 1 สำหรับการใช้งาน ตามตัวเลือกมีเพียงสองตัวเลือกที่มีอยู่ (0 และ 1) แต่ถ้าคุณต้องการที่จะแสดงบันทึกทั้งหมดมันมีประโยชน์ที่จะรวมในที่ใกล้ 1 = 1 ดูตัวอย่างด้านล่าง:

Declare @SearchValue    varchar(8) 
Declare @SQLQuery varchar(max) = '
Select [FirstName]
    ,[LastName]
    ,[MiddleName]
    ,[BirthDate]
,Case
    when [Status] = 0 then ''Inactive''
    when [Status] = 1 then ''Active''
end as [Status]'

Declare @SearchOption nvarchar(100)
If (@SearchValue = 'Active')
Begin
    Set @SearchOption = ' Where a.[Status] = 1'
End

If (@SearchValue = 'Inactive')
Begin
    Set @SearchOption = ' Where a.[Status] = 0'
End

If (@SearchValue = 'All')
Begin
    Set @SearchOption = ' Where 1=1'
End

Set @SQLQuery = @SQLQuery + @SearchOption

Exec(@SQLQuery);

2

ต้องตรวจสอบคำตอบทั้งหมดที่ฉันตัดสินใจทำการทดลองบางอย่างเช่น

SELECT
*
FROM MyTable

WHERE 1=1

จากนั้นฉันตรวจสอบกับหมายเลขอื่น

WHERE 2=2
WHERE 10=10
WHERE 99=99

ect หลังจากทำการตรวจสอบทั้งหมดแล้วแบบสอบถามรันเมืองก็เหมือนกัน แม้ไม่มีส่วนคำสั่ง ฉันไม่ใช่แฟนของไวยากรณ์


1

ฉันทำสิ่งนี้โดยปกติเมื่อฉันสร้าง SQL แบบไดนามิกสำหรับรายงานที่มีค่าแบบเลื่อนลงจำนวนมากที่ผู้ใช้สามารถเลือกได้ เนื่องจากผู้ใช้อาจเลือกหรือไม่เลือกค่าจากดรอปดาวน์แต่ละครั้งเราจึงได้รับเวลาที่ยากลำบากในการพิจารณาว่าเงื่อนไขใดเป็นข้อแรกที่ข้อใด ดังนั้นเราจึงวางเคียวรีด้วย awhere 1=1ในท้ายที่สุดและเพิ่มส่วนคำสั่งทั้งหมดหลังจากนั้น

สิ่งที่ต้องการ

select column1, column2 from my table where 1=1 {name} {age};

จากนั้นเราจะสร้างส่วนคำสั่งแบบนี้และส่งเป็นค่าพารามิเตอร์

string name_whereClause= ddlName.SelectedIndex > 0 ? "AND name ='"+ ddlName.SelectedValue+ "'" : "";

ในขณะที่การเลือกส่วนคำสั่งไม่เป็นที่รู้จักของเราตอนรันไทม์ดังนั้นสิ่งนี้ช่วยเราได้มากในการค้นหาว่าจะรวมหรือไม่ 'AND' or 'WHERE'.


0

การใช้เพรดิเคตไลท์1=1เป็นคำใบ้ปกติบางครั้งใช้เพื่อบังคับให้แผนการเข้าถึงใช้หรือไม่ใช้การสแกนดัชนี เหตุผลที่ใช้สิ่งนี้คือเมื่อคุณใช้คิวรีแบบเชื่อมหลายหลายซ้อนกับเพรดิเคตจำนวนมากในส่วนคำสั่งที่บางครั้งแม้แต่การใช้ดัชนีทั้งหมดทำให้แผนการเข้าถึงอ่านแต่ละตาราง - การสแกนตารางเต็ม นี่เป็นเพียงหนึ่งในคำแนะนำมากมายที่ DBA ใช้เพื่อหลอก dbms ให้ใช้เส้นทางที่มีประสิทธิภาพมากขึ้น อย่าเพิ่งโยนเข้าไป คุณต้องการ dba เพื่อวิเคราะห์แบบสอบถามเนื่องจากมันไม่ได้ผลเสมอไป


4
คุณมีการอ้างอิงใด ๆ ที่บันทึกพฤติกรรมนี้สำหรับบางฐานข้อมูลหรือไม่
Joe

0

นี่คือกรณีการใช้งาน ... แต่ฉันไม่ได้กังวลกับด้านเทคนิคมากเกินไปว่าทำไมฉันถึงควรใช้ 1 = 1 ฉันกำลังเขียนฟังก์ชั่นโดยใช้ pyodbc เพื่อดึงข้อมูลบางอย่างจาก SQL Server ฉันกำลังมองหาวิธีที่จะบังคับให้ฟิลเลอร์หลังจากwhereคำหลักในรหัสของฉัน นี่เป็นข้อเสนอแนะที่ดีอย่างแน่นอน:

if _where == '': _where = '1=1'
...
...
...
cur.execute(f'select {predicate} from {table_name} where {_where}')

เหตุผลก็เพราะฉันไม่สามารถใช้คำหลัก 'ที่' ร่วมกันภายในตัวแปร _where clause ดังนั้นฉันคิดว่าการใช้เงื่อนไขจำลองใด ๆ ที่ประเมินว่าเป็นจริงจะใช้เป็นตัวเติม


-1

ฉันกลับมาพบกับ ADO และ asp แบบคลาสสิคก่อนคำตอบที่ฉันได้รับคือ: ประสิทธิภาพ ถ้าคุณทำแบบตรง

Select * from tablename

และส่งให้ในฐานะคำสั่ง sql / ข้อความคุณจะได้รับประสิทธิภาพที่เพิ่มขึ้นอย่างเห็นได้ชัดด้วย

Where 1=1

เพิ่มมันเป็นความแตกต่างที่มองเห็นได้ บางสิ่งบางอย่างที่ทำกับส่วนหัวของตารางที่ถูกส่งคืนทันทีที่พบเงื่อนไขแรกหรือความบ้าคลั่งอื่น ๆ


3
หากเป็นจริงทำไม DBMS ไม่เพิ่มเข้าไปเสมอ
Carcamano

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