【问题标题】:ANSI SQL questionANSI SQL 问题
【发布时间】:2009-08-11 09:52:50
【问题描述】:

我有一个包含字段(id、parent_id、name、created_at)的表。我想写一个查询来选择id、name、created_at、parent_created_at。 'parent_created_at' 是匹配父记录的 'created_at' 字段(如果它有一个 - 即记录 parent_id > 0),否则 'parent_created_at' 字段应该为空。有什么建议吗?

【问题讨论】:

    标签: sql


    【解决方案1】:

    自连接 + ANSI SQL CASE 表达式

    SELECT t.id
           , t.name
           , t.created_at
           , CASE WHEN t.parent_id > 0 THEN p.created_at ELSE NULL END AS parent_created_at 
    FROM   Table t
    JOIN   Table p
    ON     t.id = p.parent_id
    

    【讨论】:

    • 不是我预期的结果:mysql> select t.id, t.title, t.created_at, u.name, CASE WHEN t.parent_id > 0 then p.created_at ELSE NULL END AS p arent_created_at 来自用户 u,表 t 在 t.id=p .parent_id 上加入表 p,其中 t.creator_id=u.id;我在表 'table' 1 中有 2 条记录,其 parent_id 分别为 0 和 1。我希望两行都能显示。只有 parent_id=0 的行显示 .. ? 挠头
    • 天啊。与其挠头,不如提供两排桌子的所有细节?这应该需要大约 10 秒,而且您不会浪费每个人的时间。 (有关如何提供此信息的模板,请参阅我的答案。)
    • @Morpheous 和@Svetlozar:(顺便说一句,您只需要左外连接,但提供一些细节仍然是一种常见的礼貌。)
    • @Steve Kass 你是对的......我只是不知道如何定义“失踪的父母”......如果它是 0 并且由于某种原因有 id = 0 的用户.. ..但你说得对,我的“防御”没用
    • @Svetlozar:谢谢,也感谢 StackOverflow 让论坛清理了这一切。
    【解决方案2】:

    多变的,

    您的表格中只有两行,所以请麻烦您提供所有详细信息!您告诉我们的只是它们的 parent_id 是什么,而您的查询的连接条件不仅仅取决于此。

    您能否填写下面的 ... 以便我们了解完整详细信息?

    CREATE TABLE t(...
    INSERT INTO t VALUES (...
    INSERT INTO t VALUES (...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-24
      • 2013-02-07
      • 1970-01-01
      • 2011-04-16
      • 1970-01-01
      • 2010-12-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多