2015-05-29 104 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