0

私のテーブルスキーマは次のとおりです。

                      +------+-------+-------+                                                                                                                                                         
                      | id   | name1 | name2 |                                                                                          
                      +------+-------+-------+                                                                                        
                      |    1 | A     | B     |
                      |    2 | A     | C     |
                      |    3 | B     | A     |
                      |    4 | C     | D     |
                      +------+-------+-------+

そして私は次のようにクエリを使用しています:

          select * from t where name1='A' or name1='B' and name2='C';

結果は次のようになります

                       +------+-------+-------+
                       | id   | name1 | name2 |
                       +------+-------+-------+
                       |    1 | A     | B     |
                       |    2 | A     | C     |
                       +------+-------+-------+

この結果がどのようにしてもたらされたのか

name1がAまたはBになり、name2が'B' になる行を返すクエリが必要です。

クエリ結果は次のようになります

                       +------+-------+-------+
                       | id   | name1 | name2 |
                       +------+-------+-------+
                       |    1 | A     | B     |
                       +------+-------+-------+

「AND」と「OR」の演算のみを使用したクエリの結果が必要です...

4

5 に答える 5

2

ブール論理について読んでおくことをお勧めします。これは非常に簡単な操作なので、BLに精通していれば、自分でこれを行うことができたはずです。

そうは言っても、これらの2つの状態はあなたが望むことを達成します:

SELECT ... WHERE (name1 IN ('A', 'B')) AND (name2 = 'B')
SELECT ... WHERE ((name1 = 'A') or (name1 = 'B')) AND (name2 = 'B')
于 2012-11-15T14:52:26.230 に答える
0

括弧を追加して条件をグループ化します

select * from t where (name1='A' or name1='B') and name2='B';

または使用IN

select * from t where name1 IN ('A','B') and name2='B';
于 2012-11-15T14:52:35.457 に答える
0

かっこを使用する必要があります

select * from t where name1='A' or name1='B' and name2='C';

する必要があります

select * from t where (name1='A' or name1='B') and name2='B';
于 2012-11-15T14:52:52.740 に答える
0
   select * from t where (name1='A' or name1='B') and name2='B';
于 2012-11-15T14:53:04.713 に答える
0

これは優先順位の問題です。B句とC句は互いに結合しているため、次のようになります。

select * from t where name1='A' or (name1='B' and name2='B');

したがって、実行する必要があるのは、自分で句を明示的にバインドすることです。

select * from t where (name1='A' or name1='B') and name2='B';

(記述されたクエリでのCの使用はタイプミスであると想定します。これは、質問の残りの部分と一致しなかったためです)。

于 2012-11-15T14:54:16.263 に答える