关于Mysql连接情况时的错误

时间:2015-08-07 08:42:55

标签: mysql join case

1064

我想根据blogid加入不同的表,当blogid为0时,加入user_dp,否则加入user_blog.But它返回$route['404_override'] = 'error'; 错误。 如何解决这个问题?

3 个答案:

答案 0 :(得分:0)

您可以使用left join执行此操作,并按COALESCE

过滤正确的结果
select t.* 
FROM user_tq t 
left join user_dp ud on t.blogid = 0 and t.uid = ud.uid
left join user_blog ub on t.blogid != 0 and t.uid = ub.uid
where
COALESCE(ud.uid, ub.uid) IS NOT NULL and
***;

有关详细信息,请参阅:MySQL query where JOIN depends on CASE

如果您在条件下尝试inner join to filter数据,那么

select * from (
    select t.* 
    FROM user_tq t 
    join user_dp ud on t.blogid = 0 and t.uid = ud.uid
    union all
    select t.* 
    FROM user_tq t 
    join user_blog ub on t.blogid != 0 and t.uid = ub.uid
) as x
where ****;

答案 1 :(得分:0)

使用:

select * FROM users t
left join user_role r ON t.user_id = 0 AND r.user_id = t.user_id
left join product_category c ON t.user_id != 0 AND c.user_id = t.user_id
WHERE COALESCE(r.user_id, c.user_id) IS NOT NULL
WHERE ***;

将users,user_role和product_category替换为您的表格。

答案 2 :(得分:0)

此处发布的其他答案是正确的解决方案。 我将回答"为什么我会得到1064"对你而言。

您撰写的语法无效。你不能有条件地"加入这样一个表。

}匹配连接条件"。

互联网上有很多关于// Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:1.3.0' classpath 'com.google.gms:google-services:1.4.0-beta3' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } } allprojects { repositories { jcenter() } } task clean(type: Delete) { delete rootProject.buildDir } LEFT JOIN加入的网站,MySQL的网站很好地记录了[INNER] JOIN功能。

进行游戏和阅读,您将弄清楚其他解决方案的工作原理。

经过反思,我觉得这可以从一些额外的解释中受益。

请参阅此SQLFiddle:http://sqlfiddle.com/#!9/043b7/6