SQL条件' WHERE'条款

时间:2014-12-11 06:42:06

标签: sql sql-server-2014-express

我正在尝试在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条件为真,则应该应用其余的过滤。 有什么帮助吗?

5 个答案:

答案 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 EXISTSOR条件。这样,如果Table2中没有行满足WHERE,则NOT EXISTStrue,第二个条件无关紧要。否则,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)