繁体   English   中英

mysql-限制左联接

[英]mysql - limit left join

左说,例如,我有以下查询,并想限制表的left join ,我该如何实现?

SELECT * FROM Base
LEFT JOIN Derived1 ON Base.id = Derived1.id
LEFT JOIN Derived2 ON Base.id = Derived2.id
LEFT JOIN Derived3 ON (Base.id = Derived3.id WHERE Derived3.name LIKE 'test%' LIMIT 5) <-----
WHERE Base.id = 'someid';

我虽然可以这样写:

SELECT * FROM Base
LEFT JOIN Derived1 ON Base.id = Derived1.id
LEFT JOIN Derived2 ON Base.id = Derived2.id
LEFT JOIN Derived3 ON Base.id = (
    SELECT d3.id FROM Derived3 d3
    WHERE d3.name LIKE 'test%' AND Base.id = Derived3.id
    LIMIT 5
)
WHERE Base.id = 'someid';

但这给了我错误的结果

我想所有的数据是内部Derived3 ,但只有5个项目,如果Derived.name等于test 1test 2test 3等,有可能是表内100个000 000测试和一些其他的东西千不启动与'test'

所以基本上,在Derived3内给我任何东西,最多5行以'test'开头。

我该如何解决?

检查波纹管查询。

SELECT *
FROM Base
LEFT JOIN Derived1 ON Base.id = Derived1.id
LEFT JOIN Derived2 ON Base.id = Derived2.id
LEFT JOIN Derived3 ON (
        Base.id = Derived3.id
        AND Derived3.id IN (
            SELECT Derived3.id
            FROM Derived3
            WHERE Derived3.NAME LIKE 'test%' LIMIT 5
            )
        )
WHERE Base.id = 'someid'

我不确定这是否适合您的情况,但是您可以使用过滤器LIKE 'test%'从Derived3中进行选择,并使用别名将选择结果加入。

我没有安装MySql来尝试此操作,但这样的方法应该可以工作:

SELECT * FROM Base
LEFT JOIN Derived1 ON Base.id = Derived1.id
LEFT JOIN Derived2 ON Base.id = Derived2.id
LEFT JOIN (
    SELECT d3.id FROM Derived3 d3
    WHERE d3.name LIKE 'test%'
    LIMIT 5
) Derived3Alias ON Base.id = Derived3Alias.id
WHERE Base.id = 'someid'
GROUP BY Base.id;

也许您需要编写“ as Derived3Alias”,但首先尝试不使用“ as”,我认为它应该可以工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM