并获得有意义的结果。
目前我正在运行这三个查询:
SELECT t.type,t.id,s.title FROM db1.tags t INNER JOIN db1.st s ON s.id=t.id WHERE id LIKE '%%' AND t.tag='foo' AND t.type='s' ORDER BY tag desc LIMIT 0, 19
SELECT t.type,t.id,v.title FROM db1.tags t INNER JOIN db1.vi v ON v.id=t.id WHERE id LIKE '%%' AND t.tag='foo' AND t.type='v' ORDER BY tag desc LIMIT 0, 19
SELECT t.type,t.id,i.ca AS title FROM db1.tags t INNER JOIN db2.tablename i ON i.id=t.id WHERE id LIKE '%%' AND t.tag='foo' AND t.type='i' ORDER BY tag desc LIMIT 0, 19
然后尝试合并数据结果,但我真正喜欢的是如果我可以将它们组合成单个查询。
有什么想法吗?
答案 0 :(得分:4)
您可以使用UNION ALL:
SELECT * FROM (
SELECT t.type,t.id,s.title
FROM db1.tags t
INNER JOIN db1.st s ON s.id=t.id
WHERE id LIKE '%%' AND t.tag='foo' AND t.type='s'
ORDER BY tag DESC
LIMIT 0, 19
) AS T1
UNION ALL
SELECT * FROM (
SELECT t.type,t.id,v.title
FROM db1.tags t
INNER JOIN db1.vi v ON v.id=t.id
WHERE id LIKE '%%' AND t.tag='foo' AND t.type='v'
ORDER BY tag DESC
LIMIT 0, 19
) AS T2
UNION ALL
SELECT * FROM (
SELECT t.type,t.id,i.ca AS title
FROM db1.tags t
INNER JOIN db2.tablename i ON i.id=t.id
WHERE id LIKE '%%' AND t.tag='foo' AND t.type='i'
ORDER BY tag DESC
LIMIT 0, 19
) AS T3
ORDER BY type, id DESC
答案 1 :(得分:0)
你应该考虑使用UNION。 因为你总是返回3个相同的字段类型/ id / title
这也会对数据库发出3个内部请求,但是,您可以限制结果并订购完整的聚合结果。
答案 2 :(得分:0)
如果您不想使用联盟,可以尝试使用外连接。在on子句中添加t.type = something。最后,您必须使用case语句来选择标题。并不比联盟方法更容易,但它可能更快,因为它只是一次通话。