2010-12-13 71 views
5

有人可以幫我解決這個mysql問題嗎?我試圖從一個數據庫中獲取所有表名。匹配的表名與顯示錶

在我的分貝我有這樣的表:

_table1, _table2, 表3, 表4, table5_xrefs

,但我想只有不表_在開始和無_xref在結束。 所以在這個例子中我只需要table3和table4。

我使用show tables來顯示所有的表名稱,並在我使用php來匹配正確的表名。我想知道如果我只能使用mysql查詢來做同樣的事情。

回答

33

這是可能的,但你必須知道從SHOW TABLES返回的列名稱查詢是字符串tables_in_和您的數據庫名稱的串聯。因此,它是這樣的,對於數據庫test

SHOW TABLES 
     WHERE tables_in_test NOT LIKE '\_%' 
     AND tables_in_test NOT LIKE '%\_xrefs' 

但我更願意用information_schema數據庫得到這個信息:

SELECT TABLE_NAME 
    FROM information_schema.TABLES 
WHERE TABLE_SCHEMA = SCHEMA() /* = 'test'*/ 
    AND TABLE_NAME NOT LIKE '\_%' 
    AND TABLE_NAME NOT LIKE '%\_xrefs' 
+0

非常感謝。我意識到第一個查詢比第二個查詢快?你爲什麼喜歡使用那個? – Katie 2010-12-13 18:48:14

+0

主要是爲了保持一致性,我使用information_schema獲取更多關於應用程序中表和字段的信息。第二個原因是我不喜歡在列名中有變量 - 它不能輕易地放入存儲過程中。 – 2010-12-13 19:06:47

-1

您可以在SHOW TABLES查詢中use LIKE or WHERE

+0

是的,這是事實。我可以使用'喜歡',但我不能使用'不喜歡'或我錯了 – Katie 2010-12-13 18:38:59