【问题标题】:When I nest a query within another query I am getting the error "SQL error 1241 operand should contain 5 column(s)"当我在另一个查询中嵌套一个查询时,我收到错误“SQL 错误 1241 操作数应包含 5 列”
【发布时间】:2020-12-05 00:13:52
【问题描述】:
SELECT *
FROM AUTHOR
WHERE FLOOR(DATEDIFF(bDate,CURDATE())/365.25*-1) > 30 AND
    (SELECT a.*
    FROM AUTHOR a 
    WHERE (SELECT count(paperId) from AUTHOR_PAPER ap where ap.authorId = a.aEmail)) > 3

这两个查询都是独立工作的,我只想找出两个 where 子句

表格

author
(aEmail*
,fName
,lName
,bDate
,city
)

reviewer
(rEmail*
,phoneNumber
,lName
,fName
,city
)

paper
(paperId*
,title
,abstract
,submissionDate
)

author_paper
(authorId*
,paperId*
,isContact
)

paper_review
(paperId*
,reviewerId*
,score 
,reviewSubmissionDate
,reviewInvitationDate
)

* = (component of) PRIMARY KEY

我得到的错误是:17:05:14 SELECT * FROM AUTHOR WHERE FLOOR(DATEDIFF(bDate,CURDATE())/365.25-1) > 30 AND (SELECT a. FROM AUTHOR a WHERE (SELECT count(*) from AUTHOR_PAPER ap where ap.authorId = aEmail)) > 3 LIMIT 0, 1000 错误代码:1241。操作数应包含 5 列 0.000 秒

aEmail = authorId

【问题讨论】:

  • 这应该是一个JOIN,就像一个SELECT里面一个SELECT里面一个SELECT有点多。

标签: mysql subquery where-clause


【解决方案1】:

您似乎需要 30 岁以上且发表过 3 篇以上论文的作者。如果是这样,我会推荐:

select *
from author a
where 
    bdate <= current_date - interval 31 year
    and (select count(*) from author_paper ap where ap.authorid = a.email) > 3

【讨论】:

  • 一个问题。最后进行 Join、Group by 和 Have 是否更有效?还是没有区别?
  • 如何只返回表中的特定值,比如我只想返回作者的ID
  • @Ergis:子查询解决方案应该是一种有效的方法。你可以修改select子句,枚举你感兴趣的author列。
  • @GMB 我将如何设置表格以确定论文是否可以有多个作者。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-11
  • 1970-01-01
  • 2016-12-23
  • 1970-01-01
  • 2013-10-04
  • 1970-01-01
相关资源
最近更新 更多