iT邦幫忙

0

查詢所有A開頭TABLE裡的資料

sql

你好,我想要查詢資料庫下面所有A開頭TABLE裡的所有資料。
我的A開頭TABLE裡面都有一個欄位較NAME,是否可以在指定NAME為某字串。

2 個回答

8
一級屠豬士
iT邦大師 1 級 ‧ 2012-04-28 10:01:49
最佳解答
<pre class="c" name="code">建立一個database 叫ithelp

root[(none)]@localhost>create database ithelp;
Query OK, 1 row affected (0.02 sec)

root[(none)]@localhost>use ithelp;
Database changed
----------------------
建立三個A開頭的Table:
CREATE TABLE A01 (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(10)
);

CREATE TABLE A02 (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(10)
);

CREATE TABLE A03 (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(10)
);

建立一個B開頭的Table:
CREATE TABLE B01 (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(10)
);

輸入一些測試資料

INSERT INTO A01(NAME) VALUES 
('A01'),('A01'),('A01');

INSERT INTO A02(NAME) VALUES 
('A02'),('A02');

INSERT INTO A03(NAME) VALUES 
('A03');

INSERT INTO B01(NAME) VALUES 
('B01');
=============================
取出指定ithelp database 底下所有A開頭的Tables

SELECT table_name
FROM  INFORMATION_SCHEMA.TABLES
WHERE table_schema = 'ithelp'
AND table_name LIKE 'A%';

+------------+
| table_name |
+------------+
| A01        |
| A02        |
| A03        |
+------------+

產生SQL Command:
SELECT CONCAT('SELECT NAME FROM ', table_name, ';') SQLCMD
FROM  INFORMATION_SCHEMA.TABLES
WHERE table_schema = 'ithelp'
AND table_name LIKE 'A%';

+-----------------------+
| SQLCMD                |
+-----------------------+
| SELECT NAME FROM A01; |
| SELECT NAME FROM A02; |
| SELECT NAME FROM A03; |
+-----------------------+

以MySQL做例子,不過SQL Server也有information_schema,起個頭,接著自己變化吧
vic01798 iT邦新手 5 級 ‧ 2012-04-28 14:37:39 檢舉

轉化了一下

<pre class="c" name="code">
create database ithelp
use ithelp
GO
CREATE TABLE A01 (  
id INT NOT NULL IDENTITY (1, 1) PRIMARY KEY(id),  
name VARCHAR(10)  
)  
GO
CREATE TABLE A02 (  
id INT NOT NULL IDENTITY (1, 1) PRIMARY KEY(id),  
name VARCHAR(10)  
)    
GO
CREATE TABLE A03 (  
id INT NOT NULL IDENTITY (1, 1) PRIMARY KEY(id),  
name VARCHAR(10)  
)   
GO
CREATE TABLE B01 (  
id INT NOT NULL IDENTITY (1, 1) PRIMARY KEY(id),  
name VARCHAR(10)  
)    
GO
INSERT INTO A01(NAME) VALUES   
('A01'),('A01'),('A01');  
GO 
INSERT INTO A02(NAME) VALUES   
('A02'),('A02');  
GO  
INSERT INTO A03(NAME) VALUES   
('A03');  
GO
INSERT INTO B01(NAME) VALUES   
('B01');  
GO
SELECT table_name  
FROM  INFORMATION_SCHEMA.TABLES  
WHERE table_name LIKE 'A%';  
GO
SELECT ('SELECT NAME FROM ' + table_name+';' ) SQLCMD
FROM  INFORMATION_SCHEMA.TABLES  
WHERE table_name LIKE 'A%';

謝謝大大 這個也是一個高招。

12
wiseguy
iT邦超人 1 級 ‧ 2012-04-28 00:22:18

如果你是用 MySQL,那就直接在 Linux console 下這串命令就行了:

<pre class="c" name="code">echo 'show tables from 資料庫名稱 like "A%"' | \
mysql -N -u 帳號 -p密碼 | \
sed 's/^.*$/select * from & where name="你要找的字串" union/;$s/ union/;/' | \
mysql -u 帳號 -p密碼
看更多先前的回應...收起先前的回應...
vic01798 iT邦新手 5 級 ‧ 2012-04-28 07:11:55 檢舉

謝謝你,我忘了說我用的是MSSQL了。
這樣給我的感覺是不是我只能寫程式了

Albert iT邦高手 1 級 ‧ 2012-04-28 08:58:30 檢舉

不用寫程式
我寫好 Procedure 讓你在 SAP B1 呼叫就可以

wiseguy iT邦超人 1 級 ‧ 2012-04-28 10:38:20 檢舉

寫程式的用意,是讓你花一點點時間,就可以一個步驟快速搞定你所問《以 name 為條件,查詢所有A開頭的table》的需求。假如你不想寫程式,就直接用 MSSQL 的 GUI client,開第一個 A table 查詢,再開第二個 A table 查詢,再開第三個 A table 查詢 .... 不也是可以達到你的需求嗎?

vic01798 iT邦新手 5 級 ‧ 2012-04-28 14:39:43 檢舉

謝謝大大 我懂你的意思。

我要發表回答

立即登入回答