У меня есть 3 таблицы, но я могу только присоединиться к другому счету таблицы. Смотри ниже. Один ниже работает как шарм, но мне нужно добавить еще один "счет" из другой таблицы.
есть 3-я таблица с именем "ci_nomatch" и содержит ссылку на ci_address_book.reference который может иметь несколько записей (многие из многих), но мне нужен только счет этой таблицы.
поэтому, если ci_address_book будет иметь записи, называемые "item1", "item 2", "item3", и ci_nomatch будет иметь "1, item1, user1", "2, item1, user4"
Я хотел бы вернуть "2" для Item1 в запросе.
Любые идеи? Я попробовал другое соединение, но он говорит мне, что ссылка не существует, хотя она и делает!
SELECT c.*, IFNULL(p.total, 0) AS matchcount
FROM ci_address_book c
LEFT JOIN (
SELECT addressbook_id, COUNT(match_id) AS total
FROM ci_matched_sanctions
GROUP BY addressbook_id
) AS p
ON c.id=p.addressbook_id
ORDER BY matchcount DESC
LIMIT 0,15
Вы можете подзапросить его непосредственно в select
SELECT c.*, IFNULL(p.total, 0) AS matchcount,
(SELECT COUNT(*) FROM ci_nomatch n on n.reference = c.reference) AS othercount
FROM ci_address_book c
LEFT JOIN (
SELECT addressbook_id, COUNT(match_id) AS total
FROM ci_matched_sanctions
GROUP BY addressbook_id
) AS p
ON c.id=p.addressbook_id
ORDER BY matchcount DESC
LIMIT 0,15
@обновлен для комментариев. В том числе дополнительный столбец "(matchcount - othercount) AS, вычитаемый", лучше всего сделать путем подзапроса.
SELECT *, matchcount - othercount AS deducted
FROM
(
SELECT c.* , IFNULL( p.total, 0 ) AS matchcount, (
SELECT COUNT( * ) FROM ci_falsepositives n
WHERE n.addressbook_id = c.reference ) AS othercount
FROM ci_address_book c
LEFT JOIN (
SELECT addressbook_id, COUNT( match_id ) AS total
FROM ci_matched_sanctions GROUP BY addressbook_id ) AS p
ON c.id = p.addressbook_id ORDER BY matchcount DESC LIMIT 0 , 15
) S