2011-04-20 83 views
-1
select * from temp where ssn not in (select distinct ssn from temp inner join 
tamp where ssn,code_dars not in(select ssn,code_dars from temp)); 

错误1064(42000):您的SQL语法错误;检查手册中 对应于你的MySQL服务器版本使用附近的正确语法“code_dars 不是(SSN选择,从临时code_dars))”第3行为什么这个查询是假的?

+0

我希望你的错别字不是问题? – 2011-04-20 19:27:21

+0

此表在加入时是“tamp”还是“temp”? – 2011-04-20 19:32:31

+0

其中一个是temp,另一个是tamp – 2011-04-20 20:00:31

回答

1

我可以看到几个问题,您的查询......是抱怨之一是,除非你将它们连接起来一些如何,只能指定一个字段不会出现在其他列表中,因此无论你做

... inner join tamp where code_dars not in (select code_dars from temp) 

,或者你做

... inner join tamp where ROW(ssn,code_dars) not in (select ssn, code_dars from temp) 

在任何情况下,我没有事您的查询将会给你想要的东西......(什么都那就是:)...

  1. distink:在你的表中有一个叫做distink的字段,在这种情况下,你错过了一个昏迷,我们想要明确(ssn)
  2. 内部联接需要一个字段来加入这两个表...所以你需要一些像内部连接夯在table1.field = table2.field的东西
+0

不要忘记concat方法冒着(“a”,“bc”)匹配的风险(“ab”,“c”) – Brad 2011-04-20 20:20:39

+0

@Brad your're right,更正为使用行语法...仍然无效,但整个查询不会按照mehdi发布的内容进行查询 – Jaime 2011-04-20 21:10:01

5

DISTINCTdistink

而为row subqueries语法或者是

SELECT * FROM t1 
    WHERE (col1,col2) = (SELECT col3, col4 FROM t2 WHERE id = 10); 

SELECT * FROM t1 
    WHERE ROW(col1,col2) = (SELECT col3, col4 FROM t2 WHERE id = 10); 

注意列周围的括号。

0

错误其报告是你的“in”条件是同时检查2列,我不知道这是可能的。

0

我不认为你可以做

WHERE FOO, BAR CONDITION 

你将不得不要么做

WHERE FOO CONDITION AND BAR CONDITION 

或者可怕的事情一样WHERE FOO+BAR NOT IN SELECT FOO+BAR FROM OTHERTABLE(不推荐)。