1

我正在尝试AND在 SQLWHERE子句中执行条件。下面是一个伪代码示例。

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 条件为真,则应应用其余的过滤。请问有什么帮助吗?

4

5 回答 5

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)
);
于 2014-12-11T07:29:39.993 回答
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])
        )
    )
)
于 2014-12-11T07:36:41.547 回答
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
于 2014-12-11T06:51:20.920 回答
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 EXISTSistrue和第二个条件无关紧要。否则,OR根据最后一个条件,这将是真的。

我假设在那个查询Table3中加入了,对吧?Table因为否则你当然不能做到最后一个条件。如果您可以发布更接近您实际使用的查询,那就太好了。

PS:我猜这1 = 1不是真实情况,对吧?正如我在评论中问你的那样,这种情况[A] = [B]是否与其他表格完全无关?

于 2014-12-12T13:03:43.207 回答
-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)
于 2014-12-11T06:53:00.403 回答