SELECT adminTags.Tag, URL, Votes
FROM `adminTags`
LEFT JOIN `Tags` ON adminTags.Tag = Tags.Tag
我正在使用表標籤來加入表adminTags。加入時嵌套查詢?
我怎樣才能第一
SELECT *
FROM `Tags`
WHERE URL = "$site"
,然後加入這adminTags?
SELECT adminTags.Tag, URL, Votes
FROM `adminTags`
LEFT JOIN `Tags` ON adminTags.Tag = Tags.Tag
我正在使用表標籤來加入表adminTags。加入時嵌套查詢?
我怎樣才能第一
SELECT *
FROM `Tags`
WHERE URL = "$site"
,然後加入這adminTags?
你的意思是......
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
可以解決 - 只有在重新匹配。
SELECT adminTags.Tag, URL, Votes
FROM `adminTags` LEFT JOIN `Tags`
ON adminTags.Tag = Tags.Tag
WHERE `Tags`.URL = "$site"
SELECT adminTags.Tag, adminTags.URL, adminTags.Votes FROM `Tags`
LEFT JOIN `adminTags` ON adminTags.Tag = Tags.Tag
WHERE adminTags.URL = "$site"
使用外部連接有兩種選擇,結果可能會有很大的不同,因此細節很重要。
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
...而以下將所有的引用返回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