1

ANDSQLWHERE句内で条件を実行しようとしています。疑似コードの例を以下に示します。

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 条件が true の場合、残りのフィルタリングを適用する必要があります。何か助けてください。

4

5 に答える 5

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

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

返信が遅くなり申し訳ありませんが、これが必要なものを達成するための最良の方法だと思います。

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満たす行がない場合WHERENOT EXISTSistrueと 2 番目の条件は関係ありません。それ以外の場合、OR最後の条件に応じて true になります。

そのクエリで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 に答える