2015-06-19 36 views
0
  1. 所有記錄查找每個表中有場CLIENT_ID
  2. 只刪除記錄,其中CLIENT_ID = 123

以上是我的方案相同的數據庫。我想知道是否有可能通過單個查詢來使用MySQL。刪除從每個表具有特定的列值

+1

我是唯一一個想知道 - 爲什麼這個問題有一個PLSQL標籤? –

+0

@MahendarMahi不,我會添加另一個想知道 - 爲什麼tsql標籤? – rene

回答

0

您不知道具有Client_ID字段的表的名稱,可以使用信息架構找到它們並將其存儲在臨時表中。 然後,應該在循環中生成動態查詢以刪除所需的記錄。類似的東西。

0

不,這不能在單個SQL語句中完成。

您需要使用information_schema.columns表中的單獨SELECT語句來標識包含具有特定名稱的列的表(例如,

SELECT table_name 
    FROM information_schema.columns 
WHERE column_name = 'Client_ID' 
    AND table_schema = 'mydatabase' 

你可以使用從SELECT結果動態生成所需的報表DELETE。但是,這些表的名稱需要在DELETE語句中指定爲標識符。

0

下面的代碼應該可以完成這項工作。

DECLARE @T AS TABLE (ID INT PRIMARY KEY IDENTITY,STRSQL VARCHAR(8000)) 

INSERT INTO @T(STRSQL) 
SELECT DISTINCT 'DELETE [' + TABLE_SCHEMA + '].[' + TABLE_NAME + '] WHERE CLIENT_ID=123' 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE COLUMN_NAME = 'CLIENT_ID' 

DECLARE @ID INT, @STRSQL VARCHAR(8000) 
WHILE ((SELECT COUNT(*) FROM @T)>0) 
BEGIN 
SELECT TOP 1 
    @ID = ID, 
    @STRSQL=STRSQL 
FROM @T 

EXEC (@STRSQL) 
DELETE @T WHERE ID [email protected] 

END 
相關問題