1

6番または7番のプレイヤーと同じ通りと町に住むすべてのプレイヤーのプレイヤー番号、名前、通り、町を取得する必要があります。

SQLクエリの書き方がわかりません。WHERE句にサブクエリを含める必要があると思いますが、その方法がわかりません。

これは私が思いついたものですが、現時点ではテストする方法がありません

SELECT playerNo, name, street, town
FROM Players
WHERE street IN ( SELECT street, playerNo
                  FROM Players
                  WHERE playerNo IN (6,7));
AND town IN (SELECT town, playerNo
             FROM Players
             WHERE playerNo IN (6,7));

Oracle10gと互換性がある必要があります

返信してくださった皆様、ありがとうございました!

4

3 に答える 3

4

あなたはあなたのDBMSを述べていないので、これはANSI SQLソリューションです(Oracle、PostgreSQL、DB2、Teradata、MySQL、そしておそらく他の多くのものでも動作します):

SELECT playerNo, name, street, town
FROM Players
WHERE (street, town) IN (SELECT street, town
                         FROM Players
                         WHERE playerNo IN (6,7));

INオペレーターに関する補足事項:

副選択は演算子town IN (SELECT town, playerNO ...の左側とまったく同じ数の列でなければならないため、式は無効です。INあなたの場合、あなたは書く必要がありますtown IN (SELECT town FROM ...)

于 2012-05-17T17:03:07.017 に答える
2

このような何かがうまくいくはずです:

select t.playerNumber, t.name, t.street, t.town
from tablename t
inner join (select street, town from tablename where playerNumber in (6,7)) aux on aux.street = t.street and aux.town = t.town
于 2012-05-17T16:51:53.903 に答える
2
SELECT p1.playerNo, p1.name, p1.street, p1.town
FROM Players AS p1
INNER JOIN Players AS p2 ON p2.street = p1.street AND p2.town = p1.town
WHERE p2.playerNo IN (6,7)

データベース オプティマイザーは「かっこの中を見る」ことができないため、サブクエリを避けるのが最善の場合がよくあります。

于 2012-05-17T17:05:17.543 に答える