1

私は言葉と呼ばれるテーブルを持っています:

word(text) team(number)

a          1
b          1
c          2
d          3
e          1
f          1

mysqlクエリを実行しているとき、単語しか知らないので、次のようになります

SELECT word FROM words WHERE word = 'e'

ただし、同じチーム内で他の単語を追加したい

私のクエリは4行を返します:

  1. e
  2. a
  3. b

同じ単語が結果セットに 2 回含まれる可能性があります。

使用するのに最適な方法は誰ですか? UNION SELECT 、 INNER JOIN または何?

ありがとうございました

更新: テストした後、他のレコードを追加する必要があることに気付きました。つまり、最初に選択した単語を最初に追加する必要があります。また、混乱を避けるために「グループ」を「チーム」に改名しました。

テスト用:

create table words(word text, team int);
insert into words (word, team) values('a', 1),('b', 1),('c', 2),('d', 2),('e',1),('f',1);
4

3 に答える 3

1

あなたは次のようなものが欲しいと思います

SELECT b.word FROM WORDS a LEFT JOIN WORDS b ON a.team = b.team WHERE a.word = 'a'

sqlfiddle

醜いですが、SQLで必要なことを行います

SELECT word FROM words WHERE word = 'e' UNION SELECT b.word FROM WORDS a LEFT JOIN WORDS b ON a.team = b.team WHERE a.word = 'e' AND b.word != 'e'

フィドル

于 2013-08-01T20:11:07.080 に答える
1

あなたの質問はますます複雑になっています。

これは、ユニオンとサブクエリを使用して結果を取得する潜在的なソリューションです。

SQL フィドル

MySQL 5.5.32 スキーマのセットアップ:

create table words(word text, team int);
insert into words (word, team) values('a', 1),('b', 1),('c', 2),('d', 2),('e',1),('f',1);

クエリ 1 :

SELECT word FROM words WHERE word = "e"

UNION

(SELECT word FROM words
  WHERE team = (SELECT team FROM words WHERE word = "e")
  AND word != "e"
  ORDER BY word)

結果

| WORD |
--------
|    e |
|    a |
|    b |
|    f |
于 2013-08-01T20:16:10.847 に答える
0

あなたが使用することができますOR

    SELECT  word  FROM words 
    where `group` in (select `group` from words where word = 'a' )

予約済みのキーワードである列があることを知らせるためgroupに、選択するときにバッククォートを使用することを忘れないでください。

于 2013-08-01T20:06:33.670 に答える