我正在尝试在SQL AND
子句中执行条件WHERE
。
伪代码示例如下。
SELECT
*
FROM [Table]
WHERE
[A] = [B]
AND
IF EXISTS
(
SELECT TOP 1 1
FROM [Table2]
WHERE
1 = 1
)
BEGIN
--Do conditional filter
(Table3.[C] = Table.[A])
END
因此,如果if条件为真,则应该应用其余的过滤。 有什么帮助吗?
答案 0 :(得分:0)
如何使用left join
并检查null
?这样的事情(也是假的:))
SELECT
*
FROM [Table]
LEFT JOIN Table2 ON Table2.id = Table.id
WHERE
[A] = [B]
AND
Table2.x IS NULL OR Table3.c = Table.A
答案 1 :(得分:0)
在WHERE子句中,不仅有AND。您也可以使用OR,NOT和括号。因此,您可以表达任何条件组合。在您的示例中,当存在table2条目但没有匹配的table3条目时,您不希望选择任何数据。
select *
from table1 t1
where a = b
and not
(
exists (select * from table2)
and
not exists (select * from table3 t3 where t3.c = t1.a)
);
答案 2 :(得分:0)
这应该满足条件过滤器的可能性而不需要
AND
(
NOT EXISTS
(
SELECT TOP 1 1
FROM [Table2]
WHERE
1 = 1
)
OR
(
EXISTS
(
SELECT TOP 1 1
FROM [Table2]
WHERE
1 = 1
)
AND
(
--Do conditional filter
(Table3.[C] = Table.[A])
)
)
)
答案 3 :(得分:0)
对于迟到的回复感到抱歉,但我认为这是达到您需要的最佳方式:
SELECT
*
FROM [Table]
WHERE
[A] = [B]
AND
(
NOT EXISTS
(
SELECT NULL
FROM [Table2]
WHERE 1 = 1
)
OR
--Do conditional filter
(Table3.[C] = Table.[A])
)
请注意,我使用了NOT EXISTS
和OR
条件。这样,如果Table2
中没有行满足WHERE
,则NOT EXISTS
为true
,第二个条件无关紧要。否则,OR
将为真,具体取决于最后一个条件。
我假设Table3
已加入该查询中的Table
,对吧?因为当然,你不能做最后的条件。如果您可以将查询发布得更接近您实际使用的查询,那就太棒了。
PS:我猜1 = 1
不是真实情况,对吧?正如我在评论中提到的那样,这个条件以及[A] = [B]
与其他表完全无关吗?
答案 4 :(得分:-1)
This will help you :
DECLARE @SelectQuery VARCHAR(100)
DECLARE @WhereCondition VARCHAR(50) = ''
SET @SelectQuery = 'SELECT *
FROM [Table]
WHERE [A] = [B]'
IF EXISTS(SELECT TOP 1 1
FROM [Table2]
WHERE 1 = 1
)
BEGIN
--Do conditional filter
SET @WhereCondition = ' AND (Table3.[C] = Table.[A])'
END
EXEC (@SelectQuery + @WhereCondition)