【问题标题】:SQL query returning "Operand should contain 1 column(s)"返回“操作数应包含 1 列”的 SQL 查询
【发布时间】:2013-01-29 16:24:25
【问题描述】:

我目前正在处理一个查询,该查询将包含一个表中的所有行,但仅包含另一个表中的有限信息。

我已尝试使用此查询:

SELECT `t`.`uid`, `t`.`cid`, `t`.`id` FROM `tracking` as `t`
JOIN (SELECT DISTINCT(`p`.`id`, `p`.`firstname`, `p`.`lastname`, `p`.`company`) FROM `publishers` as `p`) as `p`
ON `p`.id = `t`.uid

但是,我收到主题标题中的错误。

谁能看到我在这里做错了什么?

编辑:

跟踪结构: id int(11) primary ai, cid int(11), uid int(11)。

发布者结构: id int(11) primary ai、firstname varcher(60)、lastname varchar(60)、company varchar(100)。

示例: 出版商 id 1,名字 NIKOLAJ,姓氏 JEPSEN,APECHO 公司 id 6,名字 ROBERT,姓 SCOTT,公司 FLAPJACK LTD

跟踪 id 1,cid 1,uid 1; id 2,cid 1,uid 6; id 3,cid 3,uid 1

【问题讨论】:

  • 请提供表结构和一些示例数据。

标签: mysql distinct mysql-error-1241


【解决方案1】:

当然没有两个发布者可以共享相同的 id、名字、姓氏和公司!!!

SELECT t.uid
     , t.cid
     , t.id 
  FROM tracking t
  JOIN publishers p
    ON p.id = t.uid;

【讨论】:

  • 我也在想同样的事情。回报也是按照你刚才展示的那样做的。但是,查询必须做两件事:首先是跟踪(本例中为链接)。其次,它必须向其他发布商展示使用相同的广告系列。试图在布局中显示您:i.imgur.com/PFnOZVh.png
  • 如果你想显示 publishers 表中的信息,那么你必须在 select 子句中包含它!
  • 但有不同的部分。我只从发布者表中获取信息一次。我真的必须再做一次查询才能发生吗?
  • 我不明白。当然tracking 中的每一行在publishers 中都有对应的行。我认为我们需要查看 DDL。
  • 跟踪表中的每一行都将计为对发布商链接的一次点击。因此,对于每一行,还有发布者信息(这里是 uid,用户 ID - 发布者 ID)。现在,我需要跟踪发布者链接上的所有点击,同时检查哪个发布者在运行相同的链接。 - 这有意义吗?
【解决方案2】:

DISTINCT(p.id, p.firstname, p.lastname, p.company)

是问题所在。去掉括号:

SELECT `t`.`uid`, `t`.`cid`, `t`.`id` FROM `tracking` as `t`
JOIN (SELECT DISTINCT `p`.`id`, `p`.`firstname`, `p`.`lastname`, `p`.`company` FROM `publishers` as `p`) as `p`
ON `p`.id = `t`.uid

这应该允许查询工作......但是,如果您必须为此使用 distinct,您的数据结构或查询可能存在其他问题。

【讨论】:

  • 我相信你是绝对正确的。我想要的是获得总体跟踪,并显示哪些发布商正在运行该广告系列。 i.imgur.com/PFnOZVh.png。这就是为什么我认为我实际上通过运行此查询获得了每个发布者的名字、姓氏和公司。我相信我可能需要阅读一些内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多