sql >> Databasteknik >  >> RDS >> Mysql

MySQL - Välj rad om visas mer än x gånger i annan tabell

Jag antar (och hoppas) att du inte lagrar användarens namn två gånger, eftersom det leder till datakvalitetsproblem när användaren ändrar sitt namn.

Förutsatt att tabellerna är strukturerade enligt nedan:

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

Du kan använda en GROUP BY och HAVING klausul som skulle ge dig UserID av alla användare med mer än 1 (eller vilket antal du än väljer) beställningar. Sedan ansluter du det till Members tabell för att få namnet.

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

Men om du redan har lagrat namnen (och det inte ändras), kan du hoppa över JOIN som nedan:

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


  1. 7 saker att veta om fack på Oracle Cloud Infrastructure

  2. Hur får jag MySQL autoincrement-primärnyckeln från Sequelize på save()?

  3. SQL Server 2005 Pivot på okänt antal kolumner

  4. Är det säkert att använda LIMIT utan BESTÄLLNING AV