2012-09-11 42 views
11

这里是我的代码:MySQL的内部联接与WHERE子句

SELECT table1.f_id FROM table1 WHERE table1.f_com_id = '430' AND  
table1.f_status = 'Submitted' 
INNER JOIN table2 
ON table2.f_id = table1.f_id 
where table2.f_type = 'InProcess' 

我需要table1信息与f_com_id为430和状态相关联的所有ID提交和类型应该是只在存储过程在其他表中(table2

f_idp_keyf_key在两个表中。
但是,这给了我错误,我想我把WHERE子句错了,如何解决它。

错误消息:#1064 - 您的SQL语法错误;检查对应于你的MySQL服务器版本使用附近的正确语法手册“INNER JOIN表2 ON table2.f_id =”第2行

+0

差不多80k人的意见,〜12票问题和25票的投票。当然不是太本地化。 – hims056

+0

是非常流行的语法错误。尽管如此,可能不是太本地化,但与其他语法错误一样。 –

回答

26

是的,你是对的。您已将WHERE子句放错了。您只能使用单查询一个WHERE子句,以便尽量AND像这样多个条件:

SELECT table1.f_id FROM table1 
    INNER JOIN table2 
    ON table2.f_id = table1.f_id 
WHERE table2.f_type = 'InProcess' 
    AND f_com_id = '430' 
    AND f_status = 'Submitted' 
+1

thnx很多..他为我工作..但我觉得JOIN操作总是一个更昂贵的方法,我们可以做这个其他方式,而不使用加入opertaion。如果可能的话? –

+1

@AdityaKumar加入比别人更好(例如子查询等)。建议加入。请参见[this SQLFiddle](http://sqlfiddle.com/#!3/3db23/3)。 – hims056

1

你可以只写一个where子句。

SELECT table1.f_id FROM table1 
INNER JOIN table2 
ON table2.f_id = table1.f_id 
where table1.f_com_id = '430' AND  
table1.f_status = 'Submitted' AND table2.f_type = 'InProcess' 
4


1.改变内WHERE子句才能加入。
2.你有两个不允许的WHERE。

试试这个:

 
SELECT table1.f_id FROM table1 
    INNER JOIN table2 
    ON (table2.f_id = table1.f_id AND table2.f_type = 'InProcess') 
    WHERE table1.f_com_id = '430' AND table1.f_status = 'Submitted' 
-2

使用两个WHERE条款,但只有一个是允许的。像这样使用它:

SELECT table1.f_id FROM table1 
INNER JOIN table2 ON table2.f_id = table1.f_id 
WHERE 
    table1.f_com_id = '430' 
    AND table1.f_status = 'Submitted' 
    AND table2.f_type = 'InProcess'