簡體   English   中英

SQL從表中選擇並獲取表名

[英]SQL select from table and get table name

我喜歡三個表,它們具有相同的列,例如ID,Name,Image,...我正在使用此代碼從中選擇

(SELECT ID, Name FROM `creatures` WHERE ... )
UNION
(SELECT ID, Name FROM `items` ...)
UNION
( ... FROM `anothertable` ... )

我在php中這樣做,它為每個結果在表中創建一行。 現在的問題是,我需要知道從哪張表中提取了該行。 我是SQL的新手,我不知道它是否可以完成。 我雖然說:

SELECT ID, Name, TableName FROM ...

可能嗎?

您只需在選擇中添加一列表名稱即可。

(SELECT 'creatures' AS tablename, ID, Name FROM `creatures` WHERE ... )
UNION
(SELECT 'items' AS tablename, ID, Name FROM `items` ...)
UNION
( ... FROM `anothertable` ... )

附帶說明,由於需要所有行,因此使用UNION ALL更快,因為不需要執行DISTINCT來消除重復項。

您只需將表名作為字符串文字添加到每個查詢中:

(SELECT 'creatures' AS table_name, ID, Name FROM `creatures` WHERE ... )
UNION
(SELECT 'items' AS table_name, ID, Name FROM `items` ...)
UNION
( ... FROM `anothertable` ... )

編輯:請注意,由於您知道來自不同表的兩行不能相等,因此您現在可以使用union all而不是union ,這可能會給您帶來一點性能提升。

嘗試這個:

(SELECT ID, Name, 'creatures' as TableName FROM `creatures` WHERE ... )
UNION ALL
(SELECT ID, Name, 'items' as TableName FROM `items` ...)
UNION All
( SELECT ID, Name, 'anothertable' as TableName FROM `anothertable` ... )

樣本結果:

ID   Name    TableName
1    Name1   creatures
2    Name2   creatures
1    Name3   items
1    Name5   anothertable

您可以簡單地在sql中進行硬編碼,如下所示

(SELECT ID, Name,'creatures' as TableName FROM `creatures` WHERE ... )
UNION
(SELECT ID, Name,'items' as TableName FROM `items` ...)
UNION
( ... FROM `anothertable` ... )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM