是否可以直接在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