кросс применяются в sql server - PullRequest
0 голосов
/ 10 июня 2011

недавно у меня возникла проблема с моей хранимой процедурой, она работала слишком медленно, поэтому один из моих коллег предложил перекрестное применение, он сказал, что перекрестное применение работает как внутреннее соединение, но без необходимости использования комманд-ключа между таблицей.

у меня в сенарио три таблицы crossarticle_article, crossarticle_articletocategory и crossarticle_article. Теперь я хочу получить все записи, у которых categoryid равно 4, categoryid хранятся в crossarticle_articletocategory* 1009.*

насколько я понял, я создал для него запрос ниже:

SELECT *
FROM   crossarticle_article c
       CROSS APPLY
crossarticle_articletocategory cc1
CROSS APPLY
crossarticle_category cc2
WHERE  cc2.id = 1

этот запрос должен возвращать только записи из crossarticle_article, где идентификатор категории соответствует 1, но он возвращает все записи из всех 3 таблиц.

, где я иду не так, если это не способ использования перекрестного применения, то как его использовать, и в чем его преимущество.

в том, что перекрестное применение работает с теми же таблицами... если так, то чем может быть сценарий ...

1 Ответ

1 голос
/ 10 июня 2011

Предполагая, что id является ключевым полем во всех таблицах, Запрос должен быть:

SELECT c.*,
       c1.colXXX,
       c2.colYYY --ALL columns  u need
FROM   crossarticle_article c
       CROSS APPLY(
    SELECT cc1.colXXX
    FROM   crossarticle_articletocategory cc1
    WHERE  cc1.id = c.id
) c1
CROSS APPLY(
    SELECT cc2.colYYY
    FROM   crossarticle_category cc2
    WHERE  cc2.id = c.id
) c2
WHERE  c.id = 4
...