2017-02-02 4 views
1

以下の表を参照してください。番号はMySQL IDに応じて異なる値を持たないすべての行を選択してください

TABLE1に私は次のクエリを試してみました

+------+-------+ 
|ID |Name | 
+------+-------+ 
|1  |A  | 
+------+-------+ 
|2  |A  | 
+------+-------+ 
|3  |A  | 
+------+-------+ 
|4  |B  | 
+------+-------+ 
|5  |B  | 
+------+-------+ 

table2の

+------+-------+ 
|ID |Number | 
+------+-------+ 
|1  |1234 | 
+------+-------+ 
|2  |123 | 
+------+-------+ 
|3  |1234 | 
+------+-------+ 
|4  |456 | 
+------+-------+ 
|5  |456 | 
+------+-------+ 

明瞭でない場合、私は名前と番号を持つすべての行をリストします。これにより、非公開番号を持つすべての名前が一覧表示されますが、最初の行のみが表示されます。

SELECT table1.Name, table2.Number 
FROM table1, table2 
WHERE table1.ID = table2.ID 
GROUP BY table1.Name having count(distinct table2.Number) > 1; 

+------+-------+ 
|Name |Number | 
+------+-------+ 
|A  |1234 | 
+------+-------+ 

同じ名前に異なる番号がある場合、すべての行をリストアウトすることが必要です。

+------+-------+ 
|Name |Number | 
+------+-------+ 
|A  |1234 | 
+------+-------+ 
|A  |123 | 
+------+-------+ 
|A  |1234 | 
+------+-------+ 
+0

SELECT * FROM表2 X(...)JOIN Y上y.name = x.name – Strawberry

+0

@Strawberry 'NAME'フィールドありませんin table2 – abigperson

答えて

0

につき1つのレコードを表示します1より大きい別個の数カウントを有する名前を識別するサブクエリへの第2の結合を行う。

SELECT t1.Name, t2.Number 
FROM table2 t2 
INNER JOIN table1 t1 
    ON t2.ID = t1.ID 
INNER JOIN 
(
    SELECT t1.Name 
    FROM table2 t2 
    INNER JOIN table1 t1 
     ON t2.ID = t1.ID 
    GROUP BY t1.Name 
    HAVING COUNT(DISTINCT t2.Number) > 1 -- # distinct numbers > 1 
) t3 
    ON t1.Name = t3.Name     -- restrict to matching names only 

ここでデモ:

SQLFiddle

0

これを行うには、サブクエリを使用することができます。

SELECT table1.Name, table2.Number 
FROM table1, table2 
WHERE table1.ID = table2.ID 
AND table1.Name IN(
    SELECT table1.Name 
    FROM table1, table2 
    WHERE table1.ID = table2.ID 
    GROUP BY table1.Name 
    HAVING count(distinct table2.Number) > 1 
); 

そうでなければ、あなたのGROUP BYはあなたが2つの表を結合することにより、あなたが望むものを達成することができ、テーブル名

+0

これを実行するとSQLクエリがハングするだけです。 SQLのために難しい?最後のSELECTクエリを単独で実行すると、見つかるはずのすべてのID(データベースの4)が得られるので、正しいと思われますか? – jvl

+0

うん...参加条件を忘れてしまった。私の答えを編集しました...更新は今すぐに動作します – abigperson

+0

サブクエリはIDを探すのではなく名前を探す必要があると思います。名前には異なるIDがあります。あなたの答えを編集しましたが、クエリはまだハングしています。何か案は?前述のように、サブクエリは別に実行するとすべての名前を付けてくれます – jvl

関連する問題