在MySQL中使用UNION时如何知道结果来自哪个表

时间:2012-05-20 08:06:15

标签: mysql

我正在使用联合查询:

SELECT snippet_id, title FROM tbl_snippets WHERE title LIKE ?
UNION
SELECT tag_id, tag FROM tbl_tags WHERE tag LIKE ?
UNION
SELECT category_id, category FROM tbl_categories WHERE category LIKE ?

我如何知道结果来自哪个表?snippet_id,tag_id和category_id没有像SN,TG或CI这样的前缀,我可以使用它来确定结果的来源。 结果基本上放在一个结果中,所以我真的不知道我在想什么是可能的,这就是我在这里问的原因。

1 个答案:

答案 0 :(得分:5)

为什么不将前缀添加为单独的(计算的)列?

SELECT 'SN' prefix, snippet_id, title FROM tbl_snippets WHERE title LIKE ?
UNION ALL
SELECT 'TA', tag_id, tag FROM tbl_tags WHERE tag LIKE ?
UNION ALL
SELECT 'CA', category_id, category FROM tbl_categories WHERE category LIKE ?

修改:我还将UNION [DISTINCT]更改为UNION ALL - 原因如下:

  • 如果原始查询为UNIONUNION ALL生成不同的结果,则引入前缀将更改结果行的数量。
  • 在大多数情况下,UNION ALL略快于UNION DISTINCT
  • 大多数人实际上想要UNION ALL