如何在字段中使用表名在union select中选择mysql

时间:2012-06-10 13:45:59

标签: mysql

我在多语言cms中有一个表,我需要一个UNION SELECT来从所有语言中选择表,无论如何我定义当前行来自女巫表?像这样的东西:

SELECT *,lan=en FROM en_table UNION SELECT *,lan=fa FROM fa_table ...

我知道我可以使用它:

SELECT *,(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_SCHEMA = 'db' AND TABLE_NAME = 'en_table' LIMIT 1) As lan FROM en_table UNION ...

但这是一个愚蠢的想法,这是更好的方法吗?

1 个答案:

答案 0 :(得分:1)

使用单引号括起来的字符串文字,别名如下:

SELECT
  *,
  /* string literal 'en' */
  'en' AS lang
FROM en_table
UNOIN ALL
  *,
  /* string literal 'fa' */
  'fa' AS lang
FROM fa_table

需要注意两点:在SELECT *查询中使用UNION是不明智的。请改为明确列,因此它们的顺序是确定性的。

SELECT
  col1,
  col2,
  'en' AS lang
FROM en_table
UNOIN ALL
  col1,
  col2,
  'fa' AS lang
FROM fa_table

然后,如果可能的话,从长远来看,您应该将所有这些表合并为一个,其中包括一个标识语言的列。这将使您不必在以后使用UNION复杂化。