如何组合这些查询

时间:2010-03-17 13:53:21

标签: mysql

并获得有意义的结果。

目前我正在运行这三个查询:

  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

然后尝试合并数据结果,但我真正喜欢的是如果我可以将它们组合成单个查询。

有什么想法吗?

3 个答案:

答案 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语句来选择标题。并不比联盟方法更容易,但它可能更快,因为它只是一次通话。