为什么这个查询失败了?

时间:2011-04-20 19:25:08

标签: mysql

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附近使用正确的语法       不在(从第3行选择ss,code_dars))'第3行

4 个答案:

答案 0 :(得分:5)

DISTINCT而非distink

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);

请注意列周围的大括号。

答案 1 :(得分: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
  3. 上的内部联接夯实

答案 2 :(得分:0)

报告的错误是你的“in”条件同时检查了2列,我不确定是否可能。

答案 3 :(得分:0)

我认为你不能做到

WHERE FOO, BAR CONDITION

您必须要么

WHERE FOO CONDITION AND BAR CONDITION

或像WHERE FOO+BAR NOT IN SELECT FOO+BAR FROM OTHERTABLE(不推荐)那样可怕。