mysql - 创建视图检查其他 table 是否有价值

mysql - create view checks other table have value

我有这两个table。

  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     |
  +------+------+----------+

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

这应该是结果

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

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

你可以试试下面的方法-

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

您可以使用 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