MySQL报错#1241:操作数应含1列,IN子查询多列问题求助
解决SQL #1241错误:Operand should contain 1 column(s)
错误原因
你写的SQL报错是因为IN子句的规则:它要求右侧的集合必须是单列数据,但你的子查询SELECT key1,key2,key3 FROM tabel2一次性返回了3列,数据库没法判断用哪一列和n1做匹配,所以抛出#1241错误。而你能正常运行的语句里,IN后面是单个值的集合,完全符合要求,所以没问题。
解决方案
根据你的实际需求选对应的修改方式:
情况1:只需要匹配某一列的值
如果n1只需要和tabel2里的某一列(比如key1)匹配,直接把查询改成只返回该列:
SELECT name FROM tabel WHERE n1 IN ( SELECT key1 FROM tabel2 )
情况2:需要匹配三列中任意一个值
如果n1只要等于tabel2里key1、key2、key3中任意一个值就算匹配,用UNION把三列合并成单列结果集:
SELECT name FROM tabel WHERE n1 IN ( SELECT key1 FROM tabel2 UNION SELECT key2 FROM tabel2 UNION SELECT key3 FROM tabel2 )
提示:UNION会自动去重重复值,如果不需要去重,换成UNION ALL效率更高。
内容的提问来源于stack exchange,提问作者daun babadotan
相关产品推荐
相关产品推荐

