Mysql
 sql >> база данни >  >> RDS >> Mysql

MySQL - Изберете ред, ако се появи повече от x пъти в друга таблица

Предполагам (и се надявам), че не съхранявате името на потребителя два пъти, тъй като това води до проблеми с качеството на данните, когато потребителят промени името си.

Ако приемем, че таблиците са структурирани, както следва:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Инструмент за команден ред на Doctrine 2; MAMP и mysql.sock

  2. MySql - изчислява времева разлика за няколко реда

  3. Структурата за проектиране/нормализиране на базата данни трябва да съдържа И, ИЛИ, незадължителни елементи и техните връзки

  4. Как да направя генератор на редове в MySQL?

  5. Как да използвам оператор LOAD DATA INFILE, когато файлът е на друго място?