2012-05-20 52 views
3

我使用的是聯合查詢時,來自哪一個表:如何知道一個結果,在MySQL中使用UNION

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

您可以爲每個select語句添加一個額外的字段,並在其中包含表名。 – inhan

回答

4

爲什麼不將前綴作爲單獨的(計算)列添加?

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 ALLUNION DISTINCT稍快。
  • 大多數人其實都想擁有UNION ALL
+0

UNION ALL可能是不必要的,因爲前綴會使表中的行具有唯一性(假設表中沒有任何重複) – JohnFx

+0

@JohnFx:謝謝。我已將它更改爲'UNION ALL',因爲'UNION [DISTINCT]'很混亂。我相應地編輯了我的答案。 – nosid

相關問題