【问题标题】:Completing a given SQL statement so that another column is displayed in the end完成给定的 SQL 语句,以便在最后显示另一列
【发布时间】:2012-09-16 19:13:20
【问题描述】:

我得到以下声明:

SELECT id FROM record_database WHERE id = <up to me to complete the statement>

记录数据库有不同的字段,其中id和name。

我应该完成这个 select 语句,以便它并排显示所有 id 和所有相应的名称,这应该使用这一行 SQL 代码来完成。提示可以使用 UNION 或 OR。

我尝试了以下变体:

SELECT id FROM record_database WHERE id = '*'
UNION
SELECT name FROM record_database WHERE name = '*';

但这些都不起作用。我尝试使用 AND 执行此操作,尝试使用显示列,但这些也不起作用。

任何帮助将不胜感激。

【问题讨论】:

  • 并排在同一行是什么意思?您是指两列不同的列还是两列合为一列?
  • 我必须完成这一行 SQL 代码,以便将两列并排显示。

标签: sql multiple-columns


【解决方案1】:

这闻起来很像家庭作业,所以我不会提供完整的答案,但你不能只联合返回不同结果集的查询。我推断 ID 是一个整数,而 NAME 是一些 varchar,它不会像您在提示中列出的那样联合。

当您说“完成”时,您是否仅限于在末尾添加内容?如果是这样,它是一个非首发。您不能仅通过向“WHERE”子句添加内容来增加返回的字段列表。您需要将内容添加到实际的字段列表中以使其返回,因此您可能会澄清您是否真的仅限于附加到您给出的查询中。

【讨论】:

  • 这是家庭作业,是的,我仅限于这行代码。但是我可以在末尾添加任何我想要的内容,所以我假设有一种方法可以在末尾添加另一个 select 语句,以显示名称列。还假设 id 和 name 是相同的类型。
  • 那么我将坚持我最初的主张。 SELECT 语句中返回的字段是字段列表中受约束的字段,如果您无法调整字段列表,并且只能在末尾添加内容,则无法创建两列输出.您可能会应用各种技巧,但即使是那些暗示将内容放在查询的 front 中的技巧,在您解释它们时仍然违反规则......
  • 不要在查询前面放东西是完全可以的,我可以在=符号之后放任何我想要的东西。
  • 啊,好吧,如果你能预先添加东西,那可能开辟一些其他途径..
  • 哦,抱歉,不,我不能把东西放在声明之前,就在之后。
【解决方案2】:

如果您正在寻找:

id
name
id next
name next

然后使用这个技巧:

SELECT col2 
FROM (
    SELECT id, col2=convert ( varchar (size of name field),id) 
    FROM table 
    WHERE ....

    UNION ALL

    SELECT id, name 
    FROM table 
    WHERE ....
     ) 
ORDER BY id

order by 将并排显示 id 和 name,col2 将在第一行包含 id,在第二行包含 name。

【讨论】:

    【解决方案3】:

    作弊。使选择返回 0 行并添加另一个将显示 2 列的行。都在同一行:

    SELECT id FROM record_database WHERE id = NULL;SELECT id,name FROM record_database;
    

    不应再将时间浪费在此类愚蠢的问题上。


    如果idname 都是char(或varchar),您也可以这样做,将两列合并为一列:

    SELECT id FROM record_database WHERE id = NULL
    UNION ALL
    SELECT id || '--' || name FROM record_database ;
    

    id || '--' || name 部分因一个 DBMS 而异。在某些情况下,+ 是 concat 运算符,在其他情况下,还有特殊功能。所以你可能需要使用:

    id  + '--'  + name
    

    或:

    CONCAT(id, '--', name)
    

    【讨论】:

      【解决方案4】:

      试试这个

      SELECT * FROM record_database WHERE id = '*' OR name = '*'
      

      【讨论】:

      • 我知道 select id, name 将允许显示两列,但这里的技巧是我必须使用给定的语句,其中没有“,名称”部分.
      • 不,这不起作用,因为我无法选择 *,因为我仅限于给定的内容。值得注意的是,我之前尝试过类似的方法以及上面给出的联合,在这两种情况下,我都得到了一个 id 列表,但 name 列永远不存在。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-05
      • 1970-01-01
      • 2018-12-28
      • 2014-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多