0

次の SQL INNER JOIN ステートメントに問題があります。私はおそらく構文的に何かが欠けています:

SELECT * from
(SELECT DISTINCT Name from Table.Names WHERE Haircolor='Red') uniquename
INNER JOIN
(SELECT * FROM Table.Names) allnames
ON uniquenames.Name = allnames.Name;

「赤」のヘアカラーを持つすべての名前が必要ですが、重複した名前は必要ありません。

NAME        HAIRCOLOR       ADDRESS   PHONE       EMAIL
-----       ---------       -------  -----       -----
Joe         Red          123 Street  20768422    blah@example.com
Joe         Red         828 Street   703435422   blah4@example.com
Joe         Red         165 Street   10768422    blah3@example.com
Jamie       Blond       4655 Street  10568888    blah3@example.com
John        Brown       941 Street   40768422    blah5@example.com
Josephine   Red         634 Street   43444343    blah2@example.com
Josephine   Red         394 Street   43414343    blah7@example.com

クエリは次を返す必要があります。

NAME        HAIRCOLOR       ADDRESS   PHONE       EMAIL
-----       ---------       -------  -----       -----
Joe         Red          123 Street  20768422    blah@example.com
Josephine   Red         634 Street   43444343    blah2@example.com

多分それはGROUP BYを含んでいますか?

4

8 に答える 8

1
SELECT * FROM names WHERE haircolor = 'red' GROUP BY name ORDER BY email ASC/DESC

元の投稿から、テーブル自体に参加しているように見えますが、なぜこれを行っているのかまったくわかりません

あなたの参加に基づいていくつかのコメント/回答がありましたが、ここで混乱を招く可能性があると思います. クエリが非常に複雑になりすぎています。

たまたまクライアントとクライアントの機能/サービスの 2 つのテーブルがあった場合、結合が必要な理由を理解できました。ただし、単一のテーブルの場合は必要ありません。

コメントに基づいて更新

SELECT DISTINCT name, haircolor, address, phone, email FROM names WHERE haircolor = 'red'

返された結果が問題にならない場合、これは必要なことを行うはずです。返された各行には個別の「名前」が必要なので、2行のみを返す必要があります。テストしていませんが、試すことができます。

ここにフィドルがありますhttp://sqlfiddle.com/#!2/cc2e4/7

于 2013-08-14T20:25:30.057 に答える
0

このビットとは別に

Table.Names

これは間違っているように見えますが、なぜこれができないのですか:

SELECT * from Table.Names WHERE Haircolor='Red'

何か不足していますか?

于 2013-08-14T00:52:34.843 に答える
0

あなたが望む行を気にしないなら、私はそのようなことをします.

   SELECT tblName.* 
   FROM Table.Names as tblName
   INNER JOIN ( SELECT Name ,HairColor, MIN(Email)
                FROM Table.Names
                WHERE Haircolor='Red'
                GROUP BY Name ,HairColor) as tmp ON ( tmp.Email = tblName.Email)
于 2013-08-14T19:44:34.637 に答える