0

特定の方法で結合する必要がある 2 つのテーブルがあります。一度表示された 1 つのテーブルの情報が必要ですが、一致するすべてのデータを返すには次のテーブルの情報が必要です。これが私の例です

ユーザー


| id | name |
-------------
| 1  | mike |
| 2  | john |
| 3  | bill |
-------------

クラス

-----------------
| uid | subject | 
-----------------
| 1   | math    |
| 1   | English |
| 2   | math    |
| 3   | math    |
| 3   | English |
-----------------

予想された結果

--------------------
|name   | mike      |
---------------------
|subject| math      |
|       | English   |
---------------------

また

--------------------
|name   |  subject  |
---------------------
|mike   | math      |
|       | English   |
---------------------

これは私の現在のクエリです

SELECT user.name, class.subject
FROM user
join class on class.uid = user.id
WHERE (user.name like '%mike%')

戻り値

--------------------
|name   |  subject  |
---------------------
|mike   | math      |
|mike   | English   |
---------------------

しかし、名前の重複をすべて削除したい。誰でもこのクエリを手伝ってもらえますか

4

2 に答える 2

2

結合タイプ関数を使用して、値を区切り文字列に連結できます...たとえば

Select u.name, (
      select
      GROUP_CONCAT(c.subject) FROM classes c where u.id = c.uid
    ) As subjects
    From user u

だからあなたはで終わる

--------------------
|name   |  subjects  |
---------------------
|mike   | math, English |
于 2013-01-01T00:34:30.483 に答える
1
set @lastname = null;
select case when name = @lastname
            then ""
            else @lastname := name
       end name,
       subject
from (select name, subject
      from user
      join class on id = uid
      where name like '%mike%'
      order by name) x

フィドル

ただし、他の人がコメントで指摘したように、これは通常、SQL ではなくアプリケーション コードで行われます。行を処理するループでは、名前が前のものと同じかどうかを確認し、そのテーブル フィールドを空白のままにします。または、グループ化を自動化するグリッド ウィジェットを使用します。

于 2013-01-01T00:31:19.390 に答える