我试图在我的应用上解决问题,我有这个问题试图让它运作。
SELECT * FROM articles
(IF articles.type = 1, INNER JOIN members ON members.id_member = articles.author_id,
INNER JOIN company ON company.id_company = articles.author_id) AS user
WHERE articles.tipe = '1' AND user = '1';
我有一个发布文章的系统,但同一个用户可以发布他的名字或他创建的公司的名称,所以,我想做的是,如果文章.tipe是类型1,然后文章由他的公司发布,如果不是,它的类型0,然后由他发布他自己的名字,如果我只使用其中的1,他们将获得混合,我试过不同的方法,但似乎没有一个适合我,有人可以帮忙吗?
答案 0 :(得分:0)
你可以离开加入两个表。对于每个文章记录,其中一个连接的记录将具有值,另一个将具有所有空值。您可以在列或案例表达式上使用coalesce。
SELECT a.*, coalesce(m.name,c.name) as username
FROM articles a
LEFT JOIN members m ON m.id_member = a.author_id and a.type = '0'
LEFT JOIN company c ON c.id_company = a.author_id and a.type = '1'
WHERE a.user = '1';
答案 1 :(得分:0)
您应该使用内部联接来仅获取具有文章类型= 1的成员ID和公司ID的文章。所以article_type条件将进入where条件,我们将使用内部联接与成员和公司表。
以下查询将提供所有文章类型
的文章select * from articles INNER JOIN members ON members.id_member = articles.author_id INNER JOIN company ON company.id_company = articles.author_id where articles.type=1 and user=1
如果您认为我不能正确理解您的问题,请添加更多说明。希望这会对你有所帮助。
答案 2 :(得分:0)
要根据文章类型使用条件连接获取article_type = 0和article_type = 1的记录,以下是查询:
select * from (
select article.type,article.name,member.name as user from articles INNER JOIN members ON members.id_member = articles.author_id where article_type=0
UNION ALL
select article.type,article.name,company.name as user from articles INNER JOIN members ON members.id_member = articles.author_id INNER JOIN company ON company.id_company = articles.author_id where article_type=1
)as tmptbl;