![](/img/trans.png)
[英]How to write a sql statement using union and identifying data from table a and table b
[英]Identifying source table from UNION query
我正在用 PHP 構建一個 RSS 提要,它使用來自三個單獨表的數據。 這些表格都引用了站點不同區域內的頁面。 我遇到的問題是嘗試在 XML 中創建鏈接字段。 在不知道每條記錄來自哪個表的情況下,我無法創建正確的鏈接。
有沒有辦法解決這個問題? 我嘗試使用 mysql_fetch_field,但它返回表的空白值。
SELECT Title FROM table1
UNION
SELECT Title FROM table2
UNION
SELECT Title FROM table3
還涉及其他領域,但這基本上是我正在使用的查詢。
只需在您的列列表中添加一個常量,如下所示:
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
這會讓你得到類似的東西:
table_name | title
-----------+-----------------------------
table1 | war and peace
table2 | 1984
table3 | terminator salvation
等等。
這允許您擁有字符串數據類型,這可能會使您更容易地轉換為鏈接(特別是如果您使用的值只需復制到您的頁面而不是被查找或轉換),並且使用as
子句將允許您引用它就像任何其他列(按名稱)。
請注意union all
的使用 - 如果您確定表中沒有重復的行(在這種情況下這可能是正確的,因為每個表都有不同的table_name
值,並且我假設標題是唯一的), union all
可以避免浪費的排序和刪除重復操作。 單獨使用union
可能會導致完成不必要的工作。
如果您希望完成重復刪除,只需恢復使用union
。
應該很容易,只需執行以下操作:
SELECT Title, 1 FROM table1
UNION ALL
SELECT Title, 2 FROM table2
UNION ALL
SELECT Title, 3 FROM table3
添加具有常量值的虛擬列。 例如。 對於每個子句,“選擇 'funky_table' 作為 source_table,標題來自 funky_table”,但引號中的名稱不同。
下面的查詢效果更好,並為您提供更好的想法,因為上面的查詢不會兩次呈現行。
SELECT t1.*,t1.table_name
FROM
t1
UNION ALL
SELECT t2.*,t2.table_name
FROM
t2
LEFT OUTER JOIN
t1
ON t1.id=t2.id
WHERE t1.id=null
上面的腳本不提供重復的數據行並確保
如果您想要 t2 表中的公共數據,請翻轉左連接
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.