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

Wer*_*eta 3 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 ?
Run Code Online (Sandbox Code Playgroud)

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

nos*_*sid 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 ?
Run Code Online (Sandbox Code Playgroud)

编辑:我也改变了UNION [DISTINCT]UNION ALL-有以下原因:

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