sql >> データベース >  >> RDS >> Mysql

MySQL-他のテーブルにx回以上表示される場合は、行を選択します

    ユーザーが名前を変更するとデータ品質の問題が発生するため、ユーザーの名前を2回保存しないことを前提としています(そして期待しています)。

    テーブルが次のように構成されていると仮定します。

    CREATE TABLE
      Members
    (
        UserID INT,
        Name VARCHAR(15)
    );
    
    INSERT INTO
      Members
    VALUES
    (111, 'Peter'),
    (222, 'Bart'),
    (333, 'Joe'),
    (444, 'Andrew');
    
    CREATE TABLE
      Orders
    (
       OrderID INT,
       UserID INT
    );
    
    INSERT INTO
      Orders
    VALUES
    (777, 111),
    (888, 333),
    (999, 111),
    (101, 444),
    (102, 111),
    (103, 333);
    

    GROUP BYを使用できます およびHAVING UserIDを提供する句 1つ以上(または選択した数)の注文を持つすべてのユーザーの。次に、それをMembersに参加させます 名前を取得するためのテーブル。

    SELECT
      Orders.UserID,
      Members.Name
    FROM
      Orders
    INNER JOIN
      Members
      ON Orders.UserID = Members.UserID
    GROUP BY
      UserID,
      Members.Name
    HAVING
      COUNT(OrderID) > 1;
    

    SQLFiddle: http://sqlfiddle.com/#!9/1dadc4/2

    ただし、名前がすでに保存されている(そしてそれが変更されていない)場合は、JOINをスキップできます。 以下のように:

    SELECT
      UserID,
      Name
    FROM
      Orders
    GROUP BY
      UserID,
      Name
    HAVING
      COUNT(OrderID) > 1
    


    1. 高速ローカルストレージを求めて

    2. mysqlダンプを使用してmysqlデータベースをバックアップしているときに0KBのサイズのファイルを取得する

    3. Oracle:RAISE_APPLICATION_ERRORを使用する状況はどうなっていますか?

    4. MySQLの動的変数名