Поиск более одного отличительного атрибута в коррелированном подзапросе - PullRequest
1 голос
/ 09 мая 2019

Я пытаюсь понять коррелированные подзапросы и не могу разобраться в этом вопросе.Мне нужно перечислить всю информацию о заданиях, в которых есть данные POS для более чем одного поставщика.

Я должен использовать коррелированный подзапрос для job_id.Я не могу использовать группу по или с любым из них.

SELECT *
FROM bookjobs a
WHERE EXISTS 
            (SELECT DISTINCT vendor_id 
             FROM pos b 
             WHERE b.job_id = a.job_id);

job_id      cust_id     job_date    descr       jobtype
----------  ----------  ----------  ----------  ----------
002         E05         1990-03-03  BUS REPORT  N
004         A01         1990-01-01  PAMPHLETS   R
005         A01         1989-11-23  GOVT        N
006         D04         1988-07-04  CAMPAIGN    H

Я не могу использовать это и для вопроса:

SELECT *
FROM bookjobs a
WHERE EXISTS 
             (SELECT job_id 
              FROM pos b 
              WHERE b.job_id = a.job_id 
              GROUP BY job_id 
              HAVING COUNT(job_id) > 1 );

job_id      cust_id     job_date    descr       jobtype
----------  ----------  ----------  ----------  ----------
002         E05         1990-03-03  BUS REPORT  N
004         A01         1990-01-01  PAMPHLETS   R
005         A01         1989-11-23  GOVT        N

SCHEMA

CREATE TABLE pos (
  po_id     CHAR(3) NOT NULL,
  job_id    CHAR(3) NOT NULL,
  po_date   DATE,
  vendor_id CHAR(3),

  PRIMARY KEY (po_id),
  FOREIGN KEY (job_id) REFERENCES bookjobs(job_id)

CREATE TABLE bookjobs (
  job_id   CHAR(3) NOT NULL,
  cust_id  CHAR(3) NOT NULL,
  job_date DATE,
  descr    CHAR(10),
  jobtype  CHAR(1),

  PRIMARY KEY (job_id),
  FOREIGN KEY (cust_id) REFERENCES publishers(cust_id)

Ожидаемые результаты должныбыть:

job_id      cust_id     job_date    descr       jobtype
----------  ----------  ----------  ----------  ----------
002         E05         1990-03-03  BUS REPORT  N
004         A01         1990-01-01  PAMPHLETS   R
005         A01         1989-11-23  GOVT        N

Ответы [ 2 ]

0 голосов
/ 09 мая 2019

Попробуйте подсчитать продавцов в предложении where, КОГДА Сгруппированы по JobId

SELECT
     *
FROM
    BookJobs AS B
WHERE
    EXISTS 
        (
        SELECT 
            P.JobId
            ,Count (Vender)
        FROM 
            Pos P
        WHERE
            P.JobId = B.JobId
        Group By 
            P.JobId
        HAVING 
            Count(Vender) > 1
        )
0 голосов
/ 09 мая 2019
SELECT *
FROM bookjobs a
WHERE ( SELECT COUNT(1)
          FROM pos b 
         WHERE b.job_id = a.job_id  ) >= 2;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...