基于左连接字段的mysql where条件

基于左连接字段的mysql where条件,mysql,sql,logic,Mysql,Sql,Logic,我正在研究一个逻辑,如果左关节字段为空,则不应应用where中的条件。有没有人能告诉我,如何只通过查询就可以做到这一点 我试着用IF-CASE,但没用 查询: SELECT * FROM tableA ta LEFT JOIN tableB tb ON tb.id = ta.id_c WHERE ta.sales = 'Closed' AND tb.deleted=0 当ta.id\u c为空时,不应考虑和tb.deleted=0的条件 为什么??因为当链接ID中有空值时,就不会为查询选择

我正在研究一个逻辑,如果左关节字段为空,则不应应用where中的条件。有没有人能告诉我,如何只通过查询就可以做到这一点

我试着用IF-CASE,但没用

查询:

SELECT *
FROM tableA ta
LEFT JOIN tableB tb ON tb.id = ta.id_c
WHERE ta.sales = 'Closed'
  AND tb.deleted=0
ta.id\u c为空时,不应考虑和tb.deleted=0的条件

为什么??因为当链接ID中有空值时,就不会为查询选择数据。有什么帮助吗?提前谢谢

预期结果: 选择表的列

实际表格:

表a:

id_c    sales  
   1    Closed 
   2    Closed 
表B:

   id  deleted 
   1    0 
查询后:当前

id_c    sales   id  deleted 
   1    Closed  1   0
预期的

id_c    sales   id    deleted 
   1    Closed  1       0
   2    Closed  NULL   NULL
注意:我无法编辑给定的左连接条件

create table tableA (
  id_c integer,
  sales varchar(255)
);

create table tableB (
  id integer,
  deleted bool
);

insert into tableA values (1, 'Closed'), (2, 'Closed');
insert into tableB values (1, 0);

SELECT *
FROM tableA ta
LEFT JOIN tableB tb ON tb.id = ta.id_c
WHERE
  (ta.sales = 'Closed' AND tb.deleted = 0) OR
  (ta.sales = 'Closed' AND tb.id is null)
还是少一点罗嗦

WHERE
  (ta.sales = 'Closed') AND (tb.deleted = 0 OR tb.id is null);
导致

id_c    sales   id  deleted 
1   Closed  1   0
2   Closed  NULL    NULL
给定

还是少一点罗嗦

WHERE
  (ta.sales = 'Closed') AND (tb.deleted = 0 OR tb.id is null);
导致

id_c    sales   id  deleted 
1   Closed  1   0
2   Closed  NULL    NULL

什么样的结果是你没有得到你期望得到的,或者什么样的结果是你不想得到的?更新。。@cgritton的问题是:你没有得到你期望得到的结果,或者你得到了你不想得到的结果?更新。。问题@CGrittonoh,我刚才看到你不能编辑左连接条件。我不明白;请更清楚地解释为什么以及您不能编辑的其他内容。我不想要NULL,我的意思是在某些记录中ta.id_c为NULL,因此整个记录不显示,因为tb.deleted=0。当您看到如何在此解决方案中给出数据示例时,请通过给出表结构和示例数据来澄清数据,还包括预期结果。解决了问题;)也许,我忍不住认为这会阻止,但这需要对应用程序进行有预谋的设计,并且不能作为一种解决方法来完成(没有一些清理)。哦,我只是看到你不能编辑左连接条件。我不明白;请更清楚地解释为什么以及您不能编辑的其他内容。我不想要NULL,我的意思是在某些记录中ta.id_c为NULL,因此整个记录不显示,因为tb.deleted=0。当您看到如何在此解决方案中给出数据示例时,请通过给出表结构和示例数据来澄清数据,还包括预期结果。解决了问题;)也许,我忍不住认为这会阻止,但这需要对应用程序进行有预谋的设计,并且不能作为一种解决方法(除非进行一些清理)。