是否可以直接在sql表單中選擇10個表中的phpmyadmin? 在我的數據庫中,我有10個表格:table1
,table2
,... table10
。我在他們的同一列column1
。該列中的記錄總是像123...
開始,並且始終是12個符號長度。 我想要做的是從這些表中選擇不以123
開頭的記錄,它們是< 12個符號長度。從mysql中的多個表中選擇
這可能嗎?
是否可以直接在sql表單中選擇10個表中的phpmyadmin? 在我的數據庫中,我有10個表格:table1
,table2
,... table10
。我在他們的同一列column1
。該列中的記錄總是像123...
開始,並且始終是12個符號長度。 我想要做的是從這些表中選擇不以123
開頭的記錄,它們是< 12個符號長度。從mysql中的多個表中選擇
這可能嗎?
以下查詢的理解是你在找什麼
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.
請標記爲答案謝謝@codeNewbie – wiretext
任何不使用UNION ALL的原因? – jarlh
@jarlh:使用'UNION ALL'的唯一好處就是性能的提升。但由於我將表名稱作爲另一列,所以最終結果中不會有任何記錄遺漏。 – CodeNewbie
按你的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....
這將導致交叉連接,這將完全拋棄OP。 – CodeNewbie
@CodeNewbie他在Q中沒有提到任何事情,他只是想要結果不是從123開始,<12 – wiretext
你不會給他一個結果,你會給他一個有效結果的交叉連接,邏輯上被用來做其他事情。 – CodeNewbie
發佈您的嘗試,以及示例數據和所需的輸出! –
也許您在尋找「UNION」 – 2015-05-29 05:40:14
我沒有任何想法如何做到這一點,例如'SELECT column1 FROM table1,table2,... table3 WHERE ...'。我真的不知道在WHERE caluse之後會發生什麼。 – Select