如何在 SQL SERVER 中为 CROSS JOIN 写入 ON 条件
How to write ON condition for CROSS JOIN in SQL SERVER
无法使用 ON 子句编写连接条件。
这是有效的:
SELECT STUDENT.STD_NAME,CLASS_SUBJECT.SUB_NAME
FROM STUDENT CROSS JOIN CLASS_SUBJECT
WHERE STUDENT.CLS_ID=CLASS_SUBJECT.CLS_ID
这不起作用:
SELECT STUDENT.STD_NAME,CLASS_SUBJECT.SUB_NAME
FROM STUDENT CROSS JOIN CLASS_SUBJECT ON STUDENT.CLS_ID=CLASS_SUBJECT.CLS_ID
CROSS JOIN
不使用 ON
子句。它产生笛卡尔积,匹配两个表中的所有记录。只有极少数情况下您确实需要这个。
如果您希望在表之间进行条件记录匹配(例如键值匹配),您应该使用 INNER JOIN
或 OUTER JOIN
变体之一(LEFT OUTER JOIN
、RIGHT OUTER JOIN
, FULL OUTER JOIN
).
可以将 CROSS JOIN
与 WHERE
子句结合使用以进行条件记录匹配,但在这种情况下建议使用 INNER JOIN
。
无法使用 ON 子句编写连接条件。
这是有效的:
SELECT STUDENT.STD_NAME,CLASS_SUBJECT.SUB_NAME
FROM STUDENT CROSS JOIN CLASS_SUBJECT
WHERE STUDENT.CLS_ID=CLASS_SUBJECT.CLS_ID
这不起作用:
SELECT STUDENT.STD_NAME,CLASS_SUBJECT.SUB_NAME
FROM STUDENT CROSS JOIN CLASS_SUBJECT ON STUDENT.CLS_ID=CLASS_SUBJECT.CLS_ID
CROSS JOIN
不使用 ON
子句。它产生笛卡尔积,匹配两个表中的所有记录。只有极少数情况下您确实需要这个。
如果您希望在表之间进行条件记录匹配(例如键值匹配),您应该使用 INNER JOIN
或 OUTER JOIN
变体之一(LEFT OUTER JOIN
、RIGHT OUTER JOIN
, FULL OUTER JOIN
).
可以将 CROSS JOIN
与 WHERE
子句结合使用以进行条件记录匹配,但在这种情况下建议使用 INNER JOIN
。