Mysql
 sql >> Baza danych >  >> RDS >> Mysql

MySQL - Wybierz wiersz, jeśli pojawia się więcej niż x razy w innej tabeli

Zakładam (i mam nadzieję), że nie przechowujesz nazwy użytkownika dwa razy, ponieważ prowadzi to do problemów z jakością danych, gdy użytkownik zmienia swoje imię.

Zakładając, że tabele mają strukturę jak poniżej:

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);

Możesz użyć GROUP BY i HAVING klauzula, która da ci UserID wszystkich użytkowników z więcej niż 1 (lub dowolną liczbą) zamówień. Następnie dołączasz do Members tabeli, aby uzyskać nazwę.

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

Jeśli jednak masz już zapisane nazwy (i to się nie zmienia), możesz pominąć JOIN jak poniżej:

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. sporadyczny serwer MySQL zniknął błąd

  2. Mysql MySQL lub PHP Przekształć wiersze w dwie kolumny dynamicznie

  3. Jak zidentyfikować język w kolumnie utf-8 w MySQL?

  4. MySQL STR_TO_DATE NULL w przypadku błędu

  5. wstawiaj lub pomijaj wpisy w zapytaniu mysql na podstawie warunków wyników