Как записать условие ON для CROSS JOIN в SQL SERVER - PullRequest
0 голосов
/ 22 мая 2019

Невозможно записать условие соединения с помощью предложения 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

1 Ответ

3 голосов
/ 22 мая 2019

CROSS JOIN не использует предложение ON.Он производит декартово произведение, соответствующее всем записям из обеих таблиц.Лишь в очень редких случаях это действительно требуется.

Если вы хотите, чтобы условное сопоставление записей между таблицами (например, при совпадении значений ключей), вам следует использовать INNER JOIN или один из вариантов OUTER JOIN (LEFT OUTER JOIN, RIGHT OUTER JOIN, FULL OUTER JOIN).

Возможно объединение CROSS JOIN с предложением WHERE для условного сопоставления записей, но в таких случаях рекомендуется использовать INNER JOIN.

...