AND t1.Team IN (SELECT Team FROM t2 WHERE t3.ID = t2.ID)
我怎样才能使上述AND为可选的,如果子查询没有任何结果,甚至不考虑AND t1.Team IN ("")。类似这样的事情是行不通的:
AND t1.Team IN ("")
AND IF((SELECT Team FROM t2 WHERE t3.ID = t2.ID), (t1.Team IN (SELECT Team FROM t2 WHERE t3.ID = t2.ID)), 1)
1hdlvixo1#
形式上你需要
AND ( t1.Team IN (SELECT Team FROM t2 WHERE t3.ID = t2.ID) OR NOT EXISTS (SELECT Team FROM t2 WHERE t3.ID = t2.ID) )
但是在您的情况下,将这个子查询移动到FROM子句并使用适当的左连接似乎更合理。
njthzxwz2#
您可以在SQL查询语法中使用Case语句来检查if else条件。为此,我认为您的查询如下所示:
AND CASE WHEN (SELECT COUNT(*) FROM t2 WHERE t3.ID = t2.ID) > 0 THEN t1.Team IN (SELECT Team FROM t2 WHERE t3.ID = t2.ID) ELSE 1=1 END
cedebl8k3#
可能会快一些(如果t1.Team不为NULL):
AND t1.Team IN ( SELECT Team FROM t2 WHERE t3.ID = t2.ID UNION SELECT t1.Team )
yvgpqqbh4#
下面是一个保持查询简单和良好性能的技巧:
AND IFNULL( ( SELECT MAX(IIF(t1.Team = t2.Team, 1, 0)) FROM t2 WHERE t3.ID = t2.ID ), 1) = 1
说明:该子查询执行以下操作:1.按团队比较t2和t1中的所有行1.如果有匹配的Team-将返回1,否则返回01.如果t2中根本没有行-将返回NULL
4条答案
按热度按时间1hdlvixo1#
形式上你需要
但是在您的情况下,将这个子查询移动到FROM子句并使用适当的左连接似乎更合理。
njthzxwz2#
您可以在SQL查询语法中使用Case语句来检查if else条件。
为此,我认为您的查询如下所示:
cedebl8k3#
可能会快一些(如果t1.Team不为NULL):
yvgpqqbh4#
下面是一个保持查询简单和良好性能的技巧:
说明:
该子查询执行以下操作:
1.按团队比较t2和t1中的所有行
1.如果有匹配的Team-将返回1,否则返回0
1.如果t2中根本没有行-将返回NULL
1.因此我们期望子查询的结果为1
这意味着在2种情况下,子查询将返回1: