左联接返回不是全部行

时间:2019-11-04 10:35:36

标签: mysql sql left-join

我有两个表:baseresulttableshistoryviewdemands

我想从baseresulttables中获取前n个条目,并且在historyviewdemands中是否有它们的值。

但是查询的工作方式类似于内部联接。

我在做什么错了?

基本结果表

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

历史记录需求

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;

重用

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

1 个答案:

答案 0 :(得分:1)

在没有LIMIT的情况下使用ORDER BY毫无意义,因为您并没有告诉MySQL选择哪个 order 用于选择一定数量的记录。添加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;