UNION を使用して、2 つの異なるテーブル (同じ構造を持つ) からレコードを取得したいとします。
クエリは次のようなものです:
SELECT * FROM (
(SELECT `a1`.`title`, `a1`.`updated_date`, `a1`.`plain_description`, `a1`.`thumb`, `a1`.`link`, `c1`.`alias` as category_alias
FROM (`articles1` as a1)
LEFT JOIN `article_categories1` as c1 ON `c1`.`id`=`a1`.`category_id`
WHERE `a1`.`visible` = 1 AND `c1`.`alias` = 'category-alias' AND `c1`.`visible` = 1)
UNION
(SELECT `a2`.`title`, `a2`.`updated_date`, `a2`.`plain_description`, `a2`.`thumb`, `a2`.`link`, `c2`.`alias` as category_alias
FROM (`articles2` as a2)
LEFT JOIN `article_categories2` as c2 ON `c2`.`id`=`a2`.`category_id`
WHERE `a2`.`visible` = 1 AND `c2`.`visible` = 1)
) as t ORDER BY t.updated_date DESC LIMIT 0, 5
クエリを実行すると、次のように表示されます。
[Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'LEFT JOIN `article_categories2` as c2 ON `c2`.`id`=`a2`.`category_id`
ここで何が問題だったのですか?
**`UPDATED`**
サブクエリの括弧を削除すると、問題が解決しました。もう 1 つだけ、どのテーブルに属しているかを示すフィールドを各レコードに追加するにはどうすればよいでしょうか。次のようなものが欲しいとします。
id | title | link | table
-----------------------------------------------------
1 | Title 1 | somelink.html | articles1
2 | Title 2 | link2 .html | articles2
3 | Title 3 | link3 .html | articles1