Вложенный запрос на соединение? - PullRequest
0 голосов
/ 06 октября 2011
   SELECT adminTags.Tag, URL, Votes 
     FROM `adminTags` 
LEFT JOIN `Tags` ON adminTags.Tag = Tags.Tag

Я присоединяюсь к таблицам adminTags с табличными тегами.

Как мне сначала

SELECT * 
  FROM `Tags` 
 WHERE URL = "$site"

, а затем присоединиться к adminTags?

Ответы [ 4 ]

1 голос
/ 06 октября 2011

Вы имеете в виду ...

SELECT adminTags.Tag, URL, Votes FROM `adminTags` 
LEFT JOIN `Tags` ON adminTags.Tag = Tags.Tag AND Tags.URL = "$site"

Я подозреваю, что вы сначала попытались добавить WHERE URL = "$site", что фактически сделает это INNER JOIN (поскольку WHERE не будет удовлетворено без URL также удовлетворены.

Помещение условия в ON решает, что - вы присоединяетесь только при совпадении.

1 голос
/ 06 октября 2011
SELECT adminTags.Tag, URL, Votes
FROM `adminTags` LEFT JOIN `Tags`
ON adminTags.Tag = Tags.Tag
WHERE `Tags`.URL = "$site"
0 голосов
/ 06 октября 2011

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

   SELECT at.Tag, 
          t.url, t.votes
     FROM adminTags at
LEFT JOIN tags t ON t.tag = at.tag
                AND t.url = $site

Этот запрос будет применять t.url = $site до объединениявыполняется , что дает вам предварительно отфильтрованные результаты.

   SELECT at.Tag, 
          t.url, t.votes
     FROM adminTags at
LEFT JOIN tags t ON t.tag = at.tag
    WHERE t.url = $site

Приведенный выше запрос применяет критерии после объединения .Он не «конвертирует ВНЕШНЕЕ СОЕДИНЕНИЕ в ВНУТРЕННЕЕ СОЕДИНЕНИЕ» - он фильтрует набор результатов после выполнения OUTER JOIN.

В этом примере между наборами результатов нет никакой разницы.Однако, если в столбце URL указано, что он не имеет значения NULL (значение не может быть NULL), вы можете проверить наличие NULL (что скажет, что у ADMINTAGS нет соответствующих TAGS записей:

   SELECT at.Tag, 
          t.url, t.votes
     FROM adminTags at
LEFT JOIN tags t ON t.tag = at.tag
    WHERE t.url IS NULL

... тогда как следующий будет возвращать NULL для всех ссылок на TAGS (при этом не будет точно отображаться ADMINTAGS строк без связанных TAGS строк:

   SELECT at.Tag, 
          t.url, t.votes
     FROM adminTags at
LEFT JOIN tags t ON t.tag = at.tag
                AND t.url IS NULL
0 голосов
/ 06 октября 2011
SELECT adminTags.Tag, adminTags.URL, adminTags.Votes FROM `Tags`
LEFT JOIN `adminTags` ON adminTags.Tag = Tags.Tag
WHERE adminTags.URL = "$site"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...