Код запроса MySql для извлечения уникальных данных из одного идентификатора - PullRequest
0 голосов
/ 13 декабря 2018

Как мне указать ТАЙМЫ и ИМЕНА любого клиента, у которого есть только заказанный химикат [НОМЕР].

ORDERS ТАБЛИЦА

+---------+--------+------------+------+
| CUSTNUM | CHEMNO | DATE       | QTY  |
+---------+--------+------------+------+
|  123456 |   1234 | 2000-00-00 |   35 |
+---------+--------+------------+------+

CUSTOMER ТАБЛИЦА

+---------+-----------+-----------+
| CUSTNUM | NAME      | LOCATION  |
+---------+-----------+-----------+
|  123456 | AmChem    | New York  |
+---------+-----------+-----------+

Ответы [ 3 ]

0 голосов
/ 13 декабря 2018

Я подойду к этому с одним join между обеими таблицами, затем сгруппируюсь по столбцу CUSTNUM таблицы ORDERS и, наконец, добавлю необходимые условия для предложения HAVING, например:

SELECT
    o.CUSTNUM,
    c.NAME
FROM
    ORDERS AS o
INNER JOIN
    CUSTOMER AS c ON c.CUSTNUM = o.CUSTNUM
GROUP BY
    o.CUSTNUM
HAVING
    ( COUNT(DISTINCT o.CHEMNO) = 1 AND MIN(o.CHEMNO) = <some_chemno> )
0 голосов
/ 13 декабря 2018

ОК, медленный день ...

SELECT DISTINCT x.custnum 
  FROM orders x 
  LEFT 
  JOIN orders y 
    ON y.custnum = x.custnum 
   AND y.chemno <> x.chemno 
 WHERE x.chemno = 9377 
   AND y.order_id IS NULL;

Остальная часть этого задания оставлена ​​читателю в качестве упражнения

0 голосов
/ 13 декабря 2018

Вы можете присоединиться к таблицам CUSTOMER и ORDERS, содержащим заказы для определенного <chemno>, с подзапросом для custnum, который покупает только продукт:

SELECT
    CUSTNUM, NAME 
FROM
    CUSTOMER c
INNER JOIN
    ORDERS o ON o.CUSTNUM = c.CUSTNUM and o.CHEMNO = <chemno>
INNER JOIN
    ( SELECT
          CUSTNUM 
      FROM
          ORDERS
      GROUP BY
          CUSTNUM 
      HAVING
          COUNT(DISTINCT CHEMNO) = 1 ) t ON t.CUSTNUM = o.CUSTNUM
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...