mysql left join возвращает неожиданное количество строк

У меня есть 2 таблицы, где

tableA has 41 rows

а также

tableB has 3 rows

Я пытаюсь получить общее количество строк этих 2 таблиц с помощью запроса, используя левое соединение, но я получаю гораздо больше строк (123), чем ожидалось (44)

запрос:

SELECT COUNT(*)
    FROM tableA as u
LEFT JOIN tableB as d
    ON u.uid=d.uid
WHERE
    u.uid=912391178669
    AND
    u.deleted = 0
    AND
    d.deleted=0

схема таблиц:

TABLEA

id | UID | удаленный

TableB

id | UID | удаленный

5 ответов

Решение

Я запустил следующий запрос, он работает правильно. Вы можете проверить это.

SELECT 
  ( SELECT count(*) from table1 where.... )
+ ( SELECT count(*) from table2 where.... )
as total from dual

Я предполагаю, что у вас есть три строки в таблице A с идентификатором UID, указанным в запросе. Это будет означать, что каждая строка в таблице A будет объединяться один раз с каждой строкой в ​​таблице B, что означает, что вы вернетесь назад 41 x 3 строки или 123.

Из числа строк, которые вы ожидаете обратно, я задаюсь вопросом, нужен ли вам союз вместо объединения.

Select * from tableA where uid = 912391178669 and deleted = 0

union all

Select * from tableB where uid = 912391178669 and deleted = 0

Объединение объединит результаты двух запросов. Объединение объединит столбцы таблиц таблицы в одном запросе.

SELECT SUM(
  (SELECT count(*) from tableA WHERE uid=912391178669)
+ (SELECT count(*) from tableA WHERE uid=912391178669)
 ) as totalRows
SELECT COUNT(*)
FROM tableA as u
LEFT JOIN tableB as d
ON u.uid=d.uid
AND
u.deleted = d.deleted
WHERE
u.uid=912391178669
AND u.deleted = 0
41*3=123

в каждой строке TableA есть uid=912391178669, а в tableB в каждой строке также есть uid, поэтому вы получаете всего 123 строки. использовать некоторые критерии фильтра, чтобы получить желаемый результат (например, некоторые AND состояние)

если вы можете показать нам столбец таблицы, то, возможно, вам помогут.

Левое объединение не объединяет строки двух таблиц.
Таблица A оставленное соединение Таблица B предоставит вам все строки таблицы A, удовлетворяющие условию соединения.

Другие вопросы по тегам