2011-10-06 147 views
0
SELECT adminTags.Tag, URL, Votes 
    FROM `adminTags` 
LEFT JOIN `Tags` ON adminTags.Tag = Tags.Tag 

我正在使用表標籤來加入表adminTags。加入時嵌套查詢?

我怎樣才能第一

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

,然後加入這adminTags?

回答

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也正在滿足

將條件放入ON可以解決 - 只有在重新匹配。

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

使用外部連接有兩種選擇,結果可能會有很大的不同,因此細節很重要。

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完成後過濾結果集。

在這個例子中,結果集沒有區別。但是,如果網址列說的是不能爲空(價值不能爲空),你可以檢查空值(它會告訴你什麼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 

...而以下將所有的引用返回NULLTAGS(而不能準確地展示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