CROSS JOIN
มันจะสร้างนัย มันเป็นไวยากรณ์ของ SQL-89
ที่นี่ฉันใช้values(1)
และvalues(2)
สร้างตาราง pseduo (ตารางค่า) เพื่อเป็นตัวอย่างเท่านั้น สิ่งที่อยู่หลังพวกเขาt(x)
และg(y)
ถูกเรียกว่าFROM-Aliasesตัวละครที่อยู่ในวงเล็บคือ alias สำหรับคอลัมน์ ( x
และy
ตามลำดับ) คุณสามารถสร้างตารางเพื่อทดสอบสิ่งนี้ได้อย่างง่ายดาย
SELECT *
FROM (values(1)) AS t(x), (values(2)) AS g(y)
นี่คือวิธีที่คุณจะเขียนตอนนี้
SELECT *
FROM (values(1)) AS t(x)
CROSS JOIN (values(2)) AS g(y);
จากที่นั่นคุณสามารถทำให้สิ่งนี้เป็นนัยINNER JOIN
โดยการเพิ่มเงื่อนไข
SELECT *
FROM (values(1)) AS t(x)
CROSS JOIN (values(1)) AS g(z)
WHERE x = z;
หรือINNER JOIN
ไวยากรณ์ที่ชัดเจนและใหม่กว่า
SELECT *
FROM (values(1)) AS t(x)
INNER JOIN (values(1)) AS g(z)
ON ( x = z );
ดังนั้นในตัวอย่างของคุณ ..
FROM apod, to_tsquery('neutrino|(dark & matter)') query
นี่เป็นหลักเหมือนกับไวยากรณ์ที่ใหม่กว่า
FROM apod
CROSS JOIN to_tsquery('neutrino|(dark & matter)') AS query
ซึ่งจริงๆแล้วเหมือนกันในกรณีนี้เนื่องจากto_tsquery()
ส่งคืนแถวและไม่ใช่ชุดเป็น
SELECT title, ts_rank_cd(
textsearch,
to_tsquery('neutrino|(dark & matter)')
) AS rank
FROM apod
WHERE to_tsquery('neutrino|(dark & matter)') @@ textsearch
ORDER BY rank DESC
LIMIT 10;
อย่างไรก็ตามข้างต้นอาจทำให้to_tsquery('neutrino|(dark & matter)')
เกิดขึ้นสองครั้ง แต่ในกรณีนี้มันไม่ได้ - to_tsquery
ถูกทำเครื่องหมายเป็นเสถียร (ตรวจสอบด้วย\dfS+ to_tsquery
)
STABLE
บ่งชี้ว่าฟังก์ชั่นไม่สามารถแก้ไขฐานข้อมูลและภายในการสแกนตารางเดียวมันจะส่งคืนผลลัพธ์เดียวกันสำหรับค่าอาร์กิวเมนต์เดียวกัน แต่ผลลัพธ์นั้นสามารถเปลี่ยนแปลงได้ตลอดทั้งคำสั่ง SQL นี่คือการเลือกที่เหมาะสมสำหรับฟังก์ชั่นที่ผลลัพธ์ขึ้นอยู่กับการค้นหาฐานข้อมูลตัวแปรพารามิเตอร์ (เช่นเขตเวลาปัจจุบัน) ฯลฯ (มันไม่เหมาะสมสำหรับทริกเกอร์ AFTER ที่ต้องการแถวการสืบค้นที่แก้ไขโดยคำสั่งปัจจุบัน) โปรดทราบว่า ฟังก์ชั่นตระกูล current_timestamp มีคุณสมบัติว่าเสถียรเนื่องจากค่าของมันไม่เปลี่ยนแปลงภายในการทำธุรกรรม
สำหรับการเปรียบเทียบความแตกต่างระหว่าง SQL-89 และ SQL-92 ที่สมบูรณ์ยิ่งขึ้นดูคำตอบของฉันที่นี่
,
เข้าร่วม cross เนื่องจากเป็นเพียงผลิตภัณฑ์ Cartesian และไม่มีการเปรียบเทียบที่เกี่ยวข้อง คุณสามารถตอบคำถามอีก 1 ข้อได้ไหม มีอะไรt(x)
ใน(values(1)) AS t(x)
???