SQL - 从UNION查询中识别源表

Dan*_*Dan 18 sql union

我正在用PHP构建一个RSS源,它使用来自三个独立表的数据.表格均指网站不同区域内的页面.我遇到的问题是尝试在XML中创建链接字段.在不知道每个记录来自哪个表的情况下,我无法创建指向它的正确链接.

有没有办法解决这个问题?我尝试使用mysql_fetch_field,但它返回了表的空白值.

$sql = "
SELECT Title FROM table1
UNION 
SELECT Title FROM table2
UNION 
SELECT Title FROM table3";
Run Code Online (Sandbox Code Playgroud)

还涉及其他领域,但这基本上是我正在使用的查询.

任何帮助,将不胜感激.

谢谢.

pax*_*blo 28

只需在列列表中添加一个常量,如下所示:

select 'table1' as table_name, title from table1
union all
select 'table2' as table_name, title from table2
union all
select 'table3' as table_name, title from table3
Run Code Online (Sandbox Code Playgroud)

这会得到像你这样的东西:

table_name | title
-----------+-----------------------------
table1     | war and peace
table2     | 1984
table3     | terminator salvation
Run Code Online (Sandbox Code Playgroud)

等等.

这允许您拥有字符串数据类型,这可能使您更容易转换到链接(特别是如果您使用的值只需要复制到您的页面而不是被查找或转换),并使用该as子句将允许您引用它像任何其他列(按名称).

注意使用union all- 如果你确定表中没有重复的行(在这种情况下可能是正确的,因为你有一个不同的table_name值,我假设标题是唯一的),union all可以避免浪费的排序和删除重复操作.union单独使用可能会导致不必要的工作.

如果要完成重复删除,只需恢复使用即可union.

  • 无论您使用 union 还是 union all,这样做都可能会导致重复记录。 (2认同)

Eri*_*lje 14

应该很容易,只需做这样的事情:

$sql = "
SELECT Title, 1 FROM table1
UNION ALL
SELECT Title, 2 FROM table2
UNION ALL
SELECT Title, 3 FROM table3";
Run Code Online (Sandbox Code Playgroud)

  • 由于赢了;当你这样做时要删除任何重复项,请改用Union all. (2认同)