Php Mysql选择不在查询中

Php Mysql选择不在查询中,php,sql,Php,Sql,上述查询产生以下错误: 1241-操作数应包含1列错误显示 知道它出了什么问题吗?错误说明了一切 在中使用时,应仅在子查询“请勿使用*”中选择所需的列: 内部查询应该是 SELECT t.* from test t where t.name ='test123' and t.subject NOT IN (SELECT subject from result_master where e

上述查询产生以下错误:

1241-操作数应包含1列错误显示


知道它出了什么问题吗?

错误说明了一切

在中使用时,应仅在子查询“请勿使用*”中选择所需的列:

内部查询应该是

SELECT t.* 
from test t 
where t.name ='test123' 
  and t.subject NOT IN (SELECT subject 
                        from result_master 
                        where email = 'fusion1234@gmail.com')
为什么?

因为,在您的问题中,您将电子邮件列值与多个列值进行比较


表示在子查询中返回10个字段,但只能使用一列。它实际上是内部用逗号分隔的列表,但外部查询的结果是错误的。

虽然简单的解决方案是使用NOT IN,但10 NOT EXISTS更适合这种查询。您可以使用*表示不存在,但我更喜欢使用1:

为什么这样更好?这两个版本之间有语义上的差异。如果子查询中result_master.subject的任何值为NULL,则NOT in将永远不会返回任何行。NOT EXISTS不符合这种情况下的正常要求-它忽略空值

注意:即使列say subject被声明为notnull,我仍然倾向于notexists。它通常也具有比不具有更好的性能特征

SELECT t.* 
from test t 
where t.name ='test123' 
  and t.subject NOT IN (SELECT subject 
                        from result_master 
                        where email = 'fusion1234@gmail.com')
               (SELECT subject 
                from result_master 
                where email = 'YourEmail@domain.com')
SELECT t.*
from test t
where t.name ='test123' and
      NOT EXISTS (SELECT 1
                  from result_master rm
                  where rm.email = 'fusion1234@gmail.com' and 
                        t.subject = rm.subject
                 );