2015-05-29 111 views
-1

是否可以直接在sql表單中選擇10個表中的phpmyadmin? 在我的數據庫中,我有10個表格:table1table2,... table10。我在他們的同一列column1。該列中的記錄總是像123...開始,並且始終是12個符號長度。 我想要做的是從這些表中選擇不以123開頭的記錄,它們是< 12個符號長度。從mysql中的多個表中選擇

這可能嗎?

+0

發佈您的嘗試,以及示例數據和所需的輸出! –

+0

也許您在尋找「UNION」 – 2015-05-29 05:40:14

+0

我沒有任何想法如何做到這一點,例如'SELECT column1 FROM table1,table2,... table3 WHERE ...'。我真的不知道在WHERE caluse之後會發生什麼。 – Select

回答

3

以下查詢的理解是你在找什麼

SELECT * from 
(SELECT column1, 'table1' table_name from table1 
UNION ALL 
SELECT column1, 'table2' table_name from table2 
UNION ALL 
... --repeat for all 10 tables 
SELECT column1, 'table10' table_name from table10) 
where column1 not like '123%' and length(column1) < 12; 

這將返回的結果是這樣的:

column1  table_name 

abc   table2 
1245yy  table5 

這將爲您提供來自每個表的所有記錄,其中column1不符合長度和形式的條件噸。

編輯:

非常感謝jarlh for this comment.代替UNION使用UNION ALL是安全的(與性能提升),因爲如果COLUMN1碰巧沒有一個唯一索引,然後複製從一個表來的值將被丟棄。對於使用UNION ALL的性能獎勵的一些額外閱讀,check this link.

+0

請標記爲答案謝謝@codeNewbie – wiretext

+0

任何不使用UNION ALL的原因? – jarlh

+0

@jarlh:使用'UNION ALL'的唯一好處就是性能的提升。但由於我將表名稱作爲另一列,所以最終結果中不會有任何記錄遺漏。 – CodeNewbie

1

按你的Q和我的這個問答

select table1.column1, table2.column1, ... table10.column1 from 
table1, table2, ... table10 where 
table1.column1 = table2.column1 and 
table2.column1 = table3.column1 and ..... 
table9.column1 = table10.column1 and 
table1.column1 not like '123%' 
and table2.column1 not like '123%'..... 
and len(table1.column1) < 12, len(table2.column1) < 12.... 
+0

這將導致交叉連接,這將完全拋棄OP。 – CodeNewbie

+0

@CodeNewbie他在Q中沒有提到任何事情,他只是想要結果不是從123開始,<12 – wiretext

+0

你不會給他一個結果,你會給他一個有效結果的交叉連接,邏輯上被用來做其他事情。 – CodeNewbie