【问题标题】:How to write a MySQL query that returns a temporary column containing flags for whether or not an item related to that row exists in another table如何编写一个 MySQL 查询,该查询返回一个临时列,其中包含与该行相关的项目是否存在于另一个表中的标志
【发布时间】:2012-02-03 19:44:29
【问题描述】:

我如何编写 MySQL 查询来实现如下所示的预期结果?

我有两张桌子:

TABLE_USERS:

 ID | Name  |  ... 
--------------------
 1  | Ash   |
 2  | Tim   |
 3  | Jim   |
 4  | Jay   |
 5  | Tom   |


TABLE_FLAGS:

 ID | Reason |  ...
----------------------
 2  |  ??    |
 4  |  ...   |

我想知道如何编写一个查询以产生具有以下列的结果:

DESIRED RESULT:


 ID | Name  | Flagged
----------------------
 1  | Ash   |  false
 2  | Tim   |  true
 3  | Jim   |  false
 4  | Jay   |  true
 5  | Tom   |  false

我能做到:

SELECT TABLE_USERS.ID, TABLE_USERS.NAME
FROM TABLE_USER

要获取前两列,但我不确定如何获取最后一列...

最后一列不直接对应两个表之一中的列;相反,对于每一行,它会根据 TABLE_FLAGS 中是否存在该行 id 值的条目来返回 true 或 false

谢谢

【问题讨论】:

    标签: mysql sql


    【解决方案1】:
       SELECT   tu.ID, 
                tu.NAME,
                CASE WHEN tf.ID IS NOT NULL THEN 'true' ELSE 'false' END AS Flagged
          FROM  TABLE_USER tu
                LEFT OUTER JOIN TABLE_FLAGS tf ON tu.ID = tf.ID
    

    【讨论】:

    • 除了使用 if(tf.id IS NOT NULL, 'true', 'false') 作为标记外,将提出相同的建议。不错的答案!
    • 我会得到一个 Error Code: 1054Flagged = ... 构造。
    【解决方案2】:

    这将显示您想要的输出:

    SELECT tu.ID, tu.NAME,
           CASE WHEN tf.ID IS NOT NULL THEN 'true' ELSE 'false' END AS Flagged
      FROM TABLE_USER tu
           LEFT OUTER JOIN TABLE_FLAGS tf ON tu.ID = tf.ID ;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多