問題があると思われる興味深いクエリがあります。
複数のテーブルからデータを選択し、他のテーブルには存在しない可能性がある列を持つ追加のテーブルに結合する必要があります。
私はこれについていくつかの角度を試しました。これが最初のものです:
SELECT SiteTree.*, Page.*, AlbumItem.*, Album.*
FROM SiteTree, AlbumItem, Album
LEFT JOIN Page ON SiteTree.ID = Page.ID
これをスローします: #1054 - 'on 句' の不明な列 'SiteTree.ID'。おそらく、Album テーブルから選択するときに結合しようとすると、SiteTree.ID 列がないためです。
私もこれを試しました:
SELECT SiteTree.*, Page.*, AlbumItem.*, Album.*
FROM SiteTree LEFT JOIN Page ON SiteTree.ID = Page.ID, AlbumItem, Album
これは約 20 行を返しますが、where 句に基づいて 2 つしかないことがわかっています。実際には、各結果行の約 10 のコピーがあります
ここで、句は次のとおりです。
WHERE (
(
AlbumItem.ClassName = 'AlbumItem' OR
Album.ClassName = 'Album' OR
SiteTree.ClassName = 'Page' OR
SiteTree.ClassName = 'HomePage' OR
SiteTree.ClassName = 'NewsCategory' OR
SiteTree.ClassName = 'NewsArticle' OR
SiteTree.ClassName = 'CartPage' OR
SiteTree.ClassName = 'Product' OR
SiteTree.ClassName = 'ProductGroup' OR
SiteTree.ClassName = 'MemberProfilePage' OR
SiteTree.ClassName = 'SubscriptionPage' OR
SiteTree.ClassName = 'ErrorPage' OR
SiteTree.ClassName = 'RedirectorPage' OR
SiteTree.ClassName = 'VirtualPage' OR
SiteTree.ClassName = 'UserDefinedForm' OR
SiteTree.ClassName = 'CheckoutPage' OR
SiteTree.ClassName = 'OrderConfirmationPage' OR
SiteTree.ClassName = 'TagPage'
) AND (
INSTR(Page.Tags,'x') OR
INSTR(AlbumItem.Tags,'x') OR
INSTR(Album.Tags,'x')
)
)
クエリをこれに減らすと正しい結果が得られますが、他のテーブルでも機能しません。
SELECT SiteTree.*, Page.*
FROM SiteTree
LEFT JOIN Page ON SiteTree.ID = Page.ID
私が知る必要があるのは、私がやろうとしていることが組合に頼らずに可能かどうかです?