2

假设你有 3 张桌子..

articles(id,id_cat)
categories(id)
messages(id,id_cat,id_article)

..where与 orarticles相关categories并且messages可以与articlesor相关categories(用户可以在类别或文章中发布消息)

在假设的当前类别中id=55,我可以执行哪个查询来列出在当前类别和属于当前类别的文章中发布的所有消息?

-- 联合解决方案 --

Poodlehat 建议使用 UNION,对于这个特定问题,它是:

SELECT * FROM (
(SELECT m.id FROM messages AS m INNER JOIN categories AS c ON c.id=m.id_cat 
WHERE m.id_cat=55) 
UNION 
(SELECT m.id FROM messages AS m INNER JOIN articles AS a ON a.id=m.id_article 
WHERE a.id_cat=55)
) AS foo

----

现在,没有 UNION有没有办法做到这一点?

4

2 回答 2

0
SELECT m.id    
FROM messages m 
WHERE m.id_cat=55
union 
SELECT m.id 
FROM messages m, articles a 
WHERE a.id_cat=55
AND m.id_article=a.id

在没有工会的情况下这样做,嗯,现在你在挑战我......看看这是否有效

SELECT m.id 
FROM messages m LEFT OUTER JOIN articles a ON m.id_article=a.id
WHERE m.id_cat=55 OR a.id_cat=55
于 2012-07-16T18:34:35.160 回答
-1

尝试这个 ::

Select * from 
messages m 
inner join categories c on (m.id_cat=c.id)
inner join article a on (c.id=a.id_cat)
where m.id_cat=55
于 2012-07-16T18:26:39.777 回答