sql >> Databáze >  >> RDS >> Mysql

MySQL - Vyberte řádek, pokud se v jiné tabulce vyskytuje více než xkrát

Předpokládám (a doufám), že neukládáte jméno uživatele dvakrát, protože to vede k problémům s kvalitou dat, když si uživatel změní jméno.

Za předpokladu, že tabulky jsou strukturovány jako níže:

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

Můžete použít GROUP BY a HAVING klauzule, která vám poskytne UserID všech uživatelů s více než 1 (nebo libovolným počtem) objednávek. Poté se připojíte k Members tabulky, abyste získali jméno.

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

Pokud však již máte jména uložena (a to se nemění), můžete přeskočit JOIN jako níže:

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


  1. Je BIGINT(8) největší celé číslo, které může MySQL uložit?

  2. Chyby ORA-4031 s Direct NFS

  3. Jak získávání posledního ID vložení mysql funguje s transakcemi? + transakční otázky

  4. Rails:Postgres oprávnění k vytvoření databáze na rake db:create:all odepřeno