Left Join вернет не все строки - PullRequest
0 голосов
/ 04 ноября 2019

У меня есть две таблицы: baseresulttables и historyviewdemands.

Я хочу получить первые n записей из baseresulttables, и если есть значения для них в historyviewdemands.

Но запрос работает как внутреннее соединение.

Что я делаю не так?

baseresulttables

ID    TypeResult
792     1
9397    1
9398    1
9399    1
9400    1

historyviewdemand

ID    BaseResutlTableId
7720    9397
7721    9398
7722    9399
7723    9400
7724    9401

Запрос:

SELECT 
    bs.ID, hv.Id
FROM
    baseresulttables bs
        LEFT JOIN
    historyviewdemands hv ON (bs.ID = hv.BaseResutlTableId)
WHERE
    bs.`TypeResult` = 1
LIMIT 20 OFFSET 0;

reuslt

bs.ID   hv.Id
9397    7720
9398    7721
9399    7722
9400    7723
9401    7724

1 Ответ

1 голос
/ 04 ноября 2019

Использование LIMIT без ORDER BY довольно бессмысленно, потому что вы не указываете MySQL, какой порядок использовать для выбора определенного количества записей. Добавьте предложение ORDER BY для запроса лучших результатов.

SELECT bs.ID, hv.Id 
FROM baseresulttables bs 
LEFT JOIN historyviewdemands hv
    ON bs.ID = hv.BaseResutlTableId
WHERE
    bs.TypeResult = 1
ORDER BY <some column>
LIMIT 20 OFFSET 0;
...