0

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
4

1 に答える 1

1

いくつかの括弧を削除します

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
于 2013-09-04T06:14:35.990 に答える