基于左连接字段的mysql where条件
我正在研究一个逻辑,如果左关节字段为空,则不应应用where中的条件。有没有人能告诉我,如何只通过查询就可以做到这一点 我试着用IF-CASE,但没用 查询:基于左连接字段的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中有空值时,就不会为查询选择
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。当您看到如何在此解决方案中给出数据示例时,请通过给出表结构和示例数据来澄清数据,还包括预期结果。解决了问题;)也许,我忍不住认为这会阻止,但这需要对应用程序进行有预谋的设计,并且不能作为一种解决方法(除非进行一些清理)。