嵌套查询加入?

时间:2011-10-06 03:13:22

标签: mysql sql join

   SELECT adminTags.Tag, URL, Votes 
     FROM `adminTags` 
LEFT JOIN `Tags` ON adminTags.Tag = Tags.Tag

我正在使用表格标签加入表格管理标签。

我怎么能先

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

然后将其加入adminTags?

4 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

你的意思是......

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就不会满意。< / p>

将条件放在ON中即可解决 - 只有在匹配时才会加入。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

使用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转换为INNER JOIN” - 它会在OUTER JOIN完成后过滤结果集。

在此示例中,结果集之间没有区别。但是,如果URL列说不可为空(值不能为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