[英]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 1
, test 2
, test 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.