0

私は mySql を初めて使用し、他のいくつかのテーブルのデータを使用して、1 つの列からフィルター クエリを実行しようとしています。たとえば、名前の表、スポーツ クラスでのマークの表、およびスポーツの表を取得できます。

を使用してこのデータベースにクエリを実行できます

WHERE beta.sport = 'basketball';バスケットボールのすべてのベータ ID を取得し、事実上、バスケットボールをしているすべての子供たちを取得します。今、私はバスケットボールとラクロスをしたすべての子供たちを見つけたいと思っています.

WHERE beta.sport = 'basketball' AND beta.sport = 'lacrosse';

問題は、クエリは正常に実行されますが、結果が返されないことです。自分のデータを手動で見ると、バスケットボールやラクロスをしている子供たちがいることがわかります。バスケットボールとラクロスの両方をする子供たちをどのようにフィルタリングしますか? OR は、ラクロスまたはバスケットボールをする子供を返します。両方をプレイする子供だけを返したいのですが、スポーツのリストにアクセスできるのは、この 1 つのテーブルのベータ版だけです。

TABLE ベータ版

beta_id - sport ||
1  - basketball ||
2  - lacrosse ||
3  - football ||
4  - basketball ||
4

4 に答える 4

4
SELECT  *
FROM    names n
WHERE   (
        SELECT  COUNT(*)
        FROM    beta b
        WHERE   b.sport IN ('basketball', 'lacrosse')
                AND b.name = n.id
        ) = 2
于 2011-04-20T12:57:01.617 に答える
1

AND を OR に変更する必要があります

AND は次の意味ではありません。

私はバスケットボールをするすべての子供たちと、ラクロスをするすべての子供たちを望んでいます.

それが意味することは、ラクロスとバスケットボールの両方をプレーするすべての子供たちが欲しいということです.

OR を使用する場合は、条件を括弧で囲むことに慣れてください。

WHERE (beta.sport = 'バスケットボール' OR beta.sport = 'ラクロス')

于 2011-04-20T12:56:36.470 に答える
0

"WHERE beta.sport = 'バスケットボール' AND beta.sport = 'ラクロス';" beta.sport がバスケットボールとラクロスの両方であることを要求しているため、これは行を返すことができません... OR を試してください... WHERE beta.sport = 'basketball' OR beta.sport = 'lacrosse';

両方のサブセレクトを試すことができます...

select * from sportsTable 
where itemID in 
(select itemID from sportsTable WHERE beta.sport = 'basketball') 
and itemID in 
(select itemID from sportsTable WHERE beta.sport = 'lacrosse') 
于 2011-04-20T12:55:51.303 に答える
0
WHERE BETA.SPORT = 'BASKETBALL' OR BETA.SPORT = 'LACROSSE'

AND ではなく OR であることに注意してください。

于 2011-04-20T12:56:21.493 に答える