0

同じテーブルから、2 つの異なる選択を行い、結果に基づいてブール値を生成するのに適した方法は何でしょうか。

テスト可能

pKey | prodStatus
-----------------
1    |   0
2    |   0

私はこれをやろうとしています

select count(pKey) from testable where pKey = 1 and prodStatus = 0
along with
select count(pKey) from testable where pKey = 2 and prodStatus = 0

If both results where 1 then `true` else `false`

正しいのは、php と多くのコードを使用してこれを行うことです。なぜなら、それが純粋に SQL でどのように行われるのかがわからず、このようなものが私を超えて完全であるからです。SQL自体でこのようなことを行うにはどうすればよいですか?

4

4 に答える 4

2

これはうまくいきますか?

SELECT (
    select count(pKey) = 1 from testable where pKey = 1 and prodStatus = 0
) AND (
    select count(pKey) = 1 from testable where pKey = 2 and prodStatus = 0
)

デモを確認

于 2013-06-09T14:43:10.280 に答える
2
SELECT SUM(pKey = 1) = 1 and SUM(pKey = 2) = 1
FROM testable
WHERE prodStatus = 0
于 2013-06-09T14:45:32.480 に答える
1
SELECT SUM(CASE WHEN pKey = 1 THEN 1 ELSE 0 END) 
     = SUM(CASE WHEN pKey = 2 THEN 1 ELSE 0 END)
FROM testable
WHERE prodStatus = 0

Barmar の回答に基づいて、(1) 彼はANDあなたが欲しいと思う場所を持っていること=、(2) すべての DB がブール値から 1/0 への暗黙的な変換を許可しているわけではないことを除いて。これはより移植性が高く、別の DB を使用している誰かが Google でここに着陸した場合に機能します。

クエリ プランナーは、副選択を含む 2 つのクエリを最適化して、テーブルを 1 回だけパスするほど賢いかもしれませんが、私はそれに賭けません。

[編集]最初ENDのバージョンで省略。

于 2013-06-09T15:44:39.103 に答える
1
 select Sum(case When (pKey = 1 And prodStatus = 0) Or 
                      (pKey = 2 and prodStatus = 0)
             Then 1 Else 0 End)
 from testable 
于 2013-06-09T14:44:12.410 に答える