MySQL запрос с двойным соединением

0

У меня есть 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
  • 0
    Покажите код для второго соединения, который не работает, и мы постараемся отладить его для вас.
Теги:

1 ответ

1
Лучший ответ

Вы можете подзапросить его непосредственно в 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
  • 0
    это дает мне ошибку на "на n.reference = c.reference"
  • 0
    [есть третья таблица с именем "ci_nomatch" и содержит ссылку на ci_address_book.reference] - какое поле в ci_nomatch присоединяется к book.reference?
Показать ещё 6 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню