MySQL запрос, выбирая из 3 таблиц - PullRequest
1 голос
/ 30 марта 2012

Я спорю с запросом, извлекающим уникальные значения из 3 таблиц. Это лучше сделать в 2 отдельных запроса?

запрос:

count as returned (
all leadID from lds where status = "ok"
AND leadID is also in rlds with recID="999"
AND rdate > (03-20-2012)
 + 
(all distinct leadID from plds where recID="999"
AND change != NULL
AND pdate > (03-20-2012)) 

результат рабочего запроса должен быть "2": leadID 1 и leadID 4

Таблица lds:

leadID | статус
1 | ОК
2 | плохой
3 | ОК

таблица полей:
leadID | recID | изменить | pdate
4 | 999 | ch1 | 03-27-2012
4 | 999 | ch2 | 03-27-2012
5 | 888 | NULL | 03-27-2012

таблица полей:
leadID | recID2 | rdate
1 | 999 | 03-27-2012
6 | 999 | 03-27-2012

Спасибо!

Ответы [ 2 ]

1 голос
/ 30 марта 2012
SELECT Ids.leadId
FROM
    Ids JOIN
    rlds ON rlds.leadId = Ids.LeadId AND recID = 999 AND rdate > '03-20-2012'
WHERE Ids.Status = 'ok'

UNION

SELECT leadId
FROM pIds
WHERE recID = 999 AND change IS NOT NULL AND pdate > '03-20-2012'
0 голосов
/ 30 марта 2012

Вы можете использовать ключевое слово UNION, чтобы получить массив из 2 строк, первая из которых содержит количество ваших первых совпадений, а вторая - количество ваших вторых совпадений.

Затем вы можете использовать ключевое слово SUM для суммирования двух строк во включающем выделении. Результатом будет единственная строка, подтверждающая ваш счет.

SELECT sum(1)
FROM
(
SELECT count(1)
FROM lds
INNER JOIN rlds ON lds.leadid = plds.leadid
WHERE lds.status='ok' AND rlds.recid2=999 AND rlds.pdate > '03-20-2012'

UNION

SELECT count(1)
FROM plds
WHERE plds.recid=999
AND change != NULL
AND pdate > '03-20-2012'
) AS tmpcount
...