【问题标题】:mysql - create view checks other table have valuemysql - 创建视图检查其他表是否有价值
【发布时间】:2020-01-18 05:54:06
【问题描述】:

我有这两张桌子。

  tbl_s
  +------+---------+
  | s_id | s_name  |
  +------+---------+
  |   1  |  foo    |
  |   2  |  bar    |
  |   3  |  doe    |
  +------+---------+

  tbl_j
  +------+------+----------+
  | j_id | s_id | j_status |
  +----- +------+----------+
  |    1 |    1 |    0     |
  |    2 |    1 |    0     |
  |    3 |    1 |    1     |
  |    4 |    3 |    0     |
  |    5 |    2 |    2     |
  +------+------+----------+

我想创建一个视图(没有子查询)来检查表 tbl_j 中是否至少有一个 j_status 值!= 0

结果应该是这样的

  vw_s
  +------+---------+-----+
  | s_id | s_name  | chk |
  +------+---------+-----+
  |   1  |  foo    |  Y  |
  |   2  |  bar    |  Y  |
  |   3  |  doe    |  N  |
  +------+---------+-----+

我尝试使用 IF 但没有成功。
我该怎么办?
谢谢

【问题讨论】:

  • 你能像对输入表一样分享你想要的输出吗?

标签: mysql join subquery left-join sql-view


【解决方案1】:

你可以试试下面的方法-

select  a.s_id ,s_name,case when sum(j_status)=0 then 'N' else 'Y' end as chk
from tbl_s a inner join tbl_j b on a.s_id =b.s_id 
group by a.s_id ,s_name

【讨论】:

    【解决方案2】:

    您可以使用LEFT JOIN 和聚合:

    CREATE VIEW vw_s
    SELECT 
        s.s_id, 
        s.s_name,
        CASE WHEN MAX(j.j_status != 0) THEN 'Y' ELSE 'N' END chk
    FROM tbl_s s
    LEFT JOIN tbl_j j ON s.s_id = j.s_id
    GROUP BY s.s_id, s.s_name
    

    注意:我不知道你为什么提到这必须在没有子查询的情况下完成。另一种解决方案是使用带有NOT EXISTS 条件的内联查询。这避免了聚合的需要:

    CREATE VIEW vw_s
    SELECT 
        s.s_id, 
        s.s_name,
        CASE 
            WHEN EXISTS (SELECT 1 FROM tbl_j j WHERE s.s_id = j.s_id AND j.j_status != 0) 
            THEN 'Y' ELSE 'N' 
        END chk
    FROM tbl_s s
    

    【讨论】:

    • 是的,你是对的..它应该与 OP 的示例输入一起使用。
    • 完美!谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 2011-02-05
    • 2013-06-08
    • 2019-01-24
    • 2022-08-03
    • 1970-01-01
    相关资源
    最近更新 更多