問題タブ [three-valued-logic]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sql - SQLの「または」演算子。次のシナリオではどのように機能しますか?
私はクエリの最適化に取り組んでおり、SQLのOR演算子を常にどのように使用しているか疑問に思う状況に遭遇しました。(SQL Server 2000も)
条件付き(WHERE)句が次のようになっているクエリがあります。
これで、SQLのORが両方の式を評価することを常に理解しました。したがって、左の式でtrueと評価されたすべてのレコードが、右の式でtrueと評価されたすべてのレコードとともに返されます。例えば:
これにより、COL1が「テスト」であるすべてのレコードと、Col2が「データ」であるすべてのレコードが返されます。
上記の例では、次の条件でColumn2を変更しました。
突然、0行が返されました。
ORは、TRUEの結果が見つかるまで式を評価するだけであると誤解したことがありますか、それとも2つの異なる結果が異なる結果を返す原因となる条件がありますか?
sql - null になる可能性のある SQL 変数に対してフィールドをテストするにはどうすればよいですか?
私は次のSQLを持っています:
次の 2 つのクエリは正常に機能し、期待どおりにインデックスを使用します。
さて、次のように、比較値を変数に格納したいとしましょう。
「=」ではなく「is」演算子を使用する必要があるため、@a が null の場合、次のクエリは期待される結果を返しません。
以下は機能しますが、 @a が null の場合はテーブル スキャンを実行します (2 番目の括弧の評価を強制する 'test' 行のため)。
最終的に、私はこの解決策を思いつきました。これはうまく機能し、私のインデックスを使用します:
私の状況分析は正しいですか?
この状況を処理するより良い方法はありますか?
sql - DB モデルから NULLable 列を排除するためのオプション (SQL の 3 値ロジックを回避するため)?
しばらく前に、 CJ Dateの著書SQL and Relational Theoryを読んでいました。著者は、SQL の 3 値論理 (3VL) を批判したことで有名です。1)
著者は、SQL で 3VL を避けるべき理由についていくつかの強力な点を述べていますが、null 許容列が許可されていない場合にデータベース モデルがどのようになるかについては概説していません。私はこれについて少し考え、次の解決策を考え出しました。他のデザインオプションを見逃した場合は、それらについて聞きたいです!
1) SQL の 3VL に対する Date の批判も同様に批判されています。Claude Rubinsonによるこの論文を参照してください(CJ Date による元の批判を含みます)。
表の例:
例として、1 つの null 許容列 ( DateOfBirth
)がある次のテーブルを取り上げます。
オプション 1:NULL
フラグとデフォルト値によるエミュレート:
列を null 可能にする代わりに、任意のデフォルト値が指定されます (例: 1900-01-01
)。追加のBOOLEAN
列では、値DateOfBirth
を単に無視するか、実際にデータが含まれているかを指定します。
オプション 2: null 許容列を別のテーブルに変換する:
NULL 可能列は、新しいテーブル ( ) に置き換えられますDatesOfBirth
。レコードにその列のデータがない場合、新しいテーブルにはレコードがありません。
これはより良い解決策のように思えますが、1 つのクエリで多くのテーブルを結合する必要がある可能性があります。OUTER JOIN
s は許可されないため (結果セットに導入さNULL
れるため)、必要なすべてのデータを以前のように単一のクエリだけでフェッチすることはできなくなりました。
質問:
他に排除するためのオプションはありますかNULL
(ある場合、それは何ですか)?
sql - 3 値ロジックを SQL クエリに適用する方法は?
私は過去の紙の質問をしてきましたが、3 つの値の論理を扱うこれらの質問に直面し続けています。私のメモではそれについて言及していますが、試験で出題されるものに関連する例は示していません。
True = 1
、False = 0
& Unknown = 1/2
、And = Min
、Or = Max
の根拠を理解していますNot(x) = 1-x
。ただし、以下のような質問に適用する方法がわかりません。
SQL で、次の式の可能な真理値について議論してください。
Ra > Rb OR Ra <= 0 OR Rb >= 0
答えを正当化してください。
と:
Owner テーブルの phone フィールドと age フィールドには、null 値が含まれている場合があります。考えられるすべての組み合わせを考慮して、次の式で返される可能性のある 3 つの真理値を示してください:
phone = '141-3304913' OR age <50 OR age >= 50
これらを明確にするための助けをいただければ幸いです:)
odata - フィルタに一致しないアイテムを返す OData リクエスト
1 対多の関係を持つ関連コレクションのフィルターを使用してコレクションから選択する OData URL を作成しようとしています。フィルタでは、関連するコレクション アイテムのすべてが特定のプロパティの特定の値を持っている必要があります。
この問題を説明するために、Northwind サンプル OData サービスの同様の URL を作成しました。このクエリは、すべての注文が同じ従業員によって処理されたすべての顧客を選択する必要があります。 http://services.odata.org/V3/Northwind/Northwind.svc/Customers?$expand=Orders&$filter=Orders/all(o: o/EmployeeID eq 4)&$select=CustomerID,Orders/OrderID,Orders /従業員ID
これは与える:
最初のアイテムには、従業員 4 によって処理されたすべての注文 (この場合は 1 つだけ) が含まれています。2 番目と 3 番目のアイテムについては、結果セットに注文アイテムはありません。さらに調べてみると、http://services.odata.org/V3/Northwind/Northwind.svc/Customers?$expand=Orders&$filter=(CustomerID eq 'FISSA')&$select=CustomerID,Orders/OrderID,Orders/ EmployeeIDは、'FISSA' には実際に注文がないことを示しています (これは 'PARIS' にも当てはまります)。
「FISSA」にはフィルタ述語に違反する命令がないため、述語が成り立つと考える人もいるかもしれません。実際、これはこのクエリが SQL で解決される方法である可能性があります。
同じ 3 人の顧客を返しますが、Orders テーブルに結合すると、これが解決されます。
'CENTC' だけを返します。
'FISSA' のフィルター述語は未定であり、3 値論理の規則に従って、'FISSA' と 'PARIS' は結果セットに含まれるべきではないと思います。したがって、これはこの OData 実装のバグだと思います。
注文のない顧客を除外するための正しい OData 要求クエリを知っている人はいますか?
haskell - 3 値論理値の可能なすべての組み合わせ
与えられた量の 3 値の論理値のすべての可能な組み合わせを導くアルゴリズムはありますか?
たとえば、F(2)
次のリストを返す必要があります。
関数は次のようになります (Haskell の場合):