当前位置: 首页 > 面试题库 >

#1222-使用的SELECT语句的列数不同

凌博实
2023-03-14
问题内容

为什么我得到#1222-使用的SELECT语句具有不同数量的列?我正在尝试从此用户朋友和他自己处加载墙贴。

SELECT u.id AS pid, b2.id AS id, b2.message AS message, b2.date AS date FROM 
(
    (
        SELECT b.id AS id, b.pid AS pid, b.message AS message, b.date AS date FROM 
        wall_posts AS b 
        JOIN Friends AS f ON f.id = b.pid 
        WHERE f.buddy_id = '1' AND f.status = 'b'
        ORDER BY date DESC
        LIMIT 0, 10
    )
    UNION
    (
        SELECT * FROM
        wall_posts
        WHERE pid = '1'
        ORDER BY date DESC
        LIMIT 0, 10
    )
    ORDER BY date DESC
    LIMIT 0, 10
) AS b2 
JOIN Users AS u
ON b2.pid = u.id
WHERE u.banned='0' AND u.email_activated='1'
ORDER BY date DESC
LIMIT 0, 10

wall_posts表结构如下所示 id date privacy pid uid message

Friends表结构如下所示 Fid id buddy_id invite_up_date status

pid代表配置文件ID。我不太确定发生了什么。


问题答案:

UNION中的第一条语句返回四列:

SELECT b.id AS id, 
       b.pid AS pid, 
       b.message AS message, 
       b.date AS date 
  FROM wall_posts AS b

第二个返回 ,因为*扩展为包括以下所有列WALL_POSTS

SELECT b.id, 
       b.date, 
       b.privacy,
       b.pid. 
       b.uid message
  FROM wall_posts AS b

UNIONUNION ALL运营商要求:

  1. 组成UNION查询的所有语句中存在相同数量的列
  2. 数据类型必须在每个位置/列都匹配

使用:

FROM ((SELECT b.id AS id, 
             b.pid AS pid, 
             b.message AS message, 
             b.date AS date 
        FROM wall_posts AS b 
        JOIN Friends AS f ON f.id = b.pid 
       WHERE f.buddy_id = '1' AND f.status = 'b'
    ORDER BY date DESC
       LIMIT 0, 10)
      UNION
      (SELECT id,
              pid,
              message,
              date
         FROM wall_posts
        WHERE pid = '1'
     ORDER BY date DESC
        LIMIT 0, 10))


 类似资料:
  • 问题内容: 例如,我不知道每个表中有多少行,我尝试这样做: 在不添加的情况下,我可以将第二个而不是*放在第二个位置来删除此错误吗? 问题答案: 显式地输入列名而不是*,并确保每个选择中同一列的列数和数据类型匹配。 更新: 我真的不认为您希望基于表名称对这些表进行UNION。它们似乎不包含相关数据。如果您发布架构并描述您要实现的目标,则我们可能会提供更好的帮助。

  • 问题内容: 那里还有另一个与此类似的问题,但似乎并没有回答 我的 问题。 我的问题是这样的:为什么我要从下面的SQL中找回此错误? 这里是: 这里是: 如果您也想对这里发生的任何疯狂事情提供任何反馈,请随时这样做。我会结成小块。 问题答案: UNION(和)要求所有UNION查询必须具有: SELECT子句中的列数相同 列数据类型必须在每个位置都匹配 您的查询有: 我最简单的重写是: 您已经两次加

  • 问题内容: 我想重命名表达式结果中的列。当然,以下操作无效: 由于我是SQL的新手,我想我只是缺少一个会导致答案的概念,工具或关键字。向正确方向的提示将不胜感激。谢谢! 更新 我正在寻找一种实现此目的的通用方法,并且特定于MySQL的技术绝对可以。 简而言之,我正在编写一个工具,用于将MySQL查询的结果“导出”到Google Spreadsheets(通过Google Data API)。有些查

  • 问题内容: 在WHERE子句中有使用SELECT语句描述的名称吗?这是好/不好的做法吗? 这会是更好的选择吗? 它远没有那么优雅,但是运行起来比以前的版本要快。我不喜欢它,因为它在GUI中没有非常清晰地显示(并且SQL初学者需要理解它)。我可以将其分为两个独立的查询,但是随后事情变得混乱了…… 注意:我不仅需要日期和分数(例如姓名) 问题答案: 称为相关子查询。它有它的用途。

  • 问题内容: 在PostgreSQL 9.1中,PL / pgSQL给出了一个查询: 其中的类型(例如“ table_name”)。 如何获得“ relname”的适当值,该值可直接在语句中用作: 在PL / pgSQL脚本中? 使用如: 失败与: “(”或附近的语法错误LINE 55:UPDATE quote_ident(r.relname)…。 我正在使用的完整代码: 我敢肯定这种事情经常发生,

  • 问题内容: 如果可能,我需要一个t-sql查询,该查询从任意表中返回值,并且还返回一个增量整数列,其中第一行的值= 1,第二行的值为2,依此类推。 此列实际上不驻留在任何表中,并且必须严格地递增,因为ORDER BY子句可以对表的行进行排序,并且我希望递增的行始终处于完美的形状… 提前致谢。 --EDIT对不起,忘了提及,它必须在SQL Server 2000上运行 问题答案: 对于SQL 200