出現了一種情況,我必須啟發式地從公共 ID 中找出表名。這些表具有相同的確切結構,所以我認為union或union all會按照這里的一些答案的建議作業。問題是,對查詢應用限制子句效果不佳。如果我將其應用于多個選擇查詢,則會失敗;如果在 one 上,它只會將該表作為主要過濾器進行過濾。即使如下所示包裝它也不會產生所需的結果 - 即:將每個單獨查詢的回傳結果限制為一行。
重申問題:我如何知道已知表的串列是否具有特定值(命名列)?
開放選項提供了良好的表源作為別名,但禁止多重限制;結果可能很多:
SELECT `ID`, `BATCH_NUMBER`, 'TBL1' AS 'table_one' FROM `table_one` WHERE `NAMED_ID` = '123'
UNION ALL
SELECT `ID`, `BATCH_NUMBER`, 'TBL2' AS 'table_two' FROM `table_two` WHERE `NAMED_ID` = '123'
UNION ALL
SELECT `ID`, `BATCH_NUMBER`, 'TBL3' AS 'table_three' FROM `table_three` WHERE `NAMED_ID` = '123'
僅在第一個表結果上找到包裝選項過濾器;我們需要所有具有該值的表。
select * from (
SELECT `ID`, `BATCH_NUMBER`, 'TBL1' AS 'table_one' FROM `table_one` WHERE `NAMED_ID` = '123'
UNION ALL
SELECT `ID`, `BATCH_NUMBER`, 'TBL2' AS 'table_two' FROM `table_two` WHERE `NAMED_ID` = '123'
UNION ALL
SELECT `ID`, `BATCH_NUMBER`, 'TBL3' AS 'table_three' FROM `table_three` WHERE `NAMED_ID` = '123'
) as resutl_table
LIMIT 1
uj5u.com熱心網友回復:
如果您只想要表名,那么您的每個查詢都應該只回傳第一列:
SELECT 'TBL1' AS table_name FROM `table_one` WHERE `NAMED_ID` = '123'
UNION
SELECT 'TBL2' AS table_name FROM `table_two` WHERE `NAMED_ID` = '123'
UNION
SELECT 'TBL3' AS table_name FROM `table_three` WHERE `NAMED_ID` = '123'
或者,以逗號分隔的字串形式獲取結果:
SELECT GROUP_CONCAT(table_name) AS table_names
FROM (
SELECT 'TBL1' AS table_name FROM `table_one` WHERE `NAMED_ID` = '123'
UNION
SELECT 'TBL2' AS table_name FROM `table_two` WHERE `NAMED_ID` = '123'
UNION
SELECT 'TBL3' AS table_name FROM `table_three` WHERE `NAMED_ID` = '123'
) t
UNION 將過濾掉重復項。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/394501.html
