MYSQL中 select * from table1 t1, table2 t2 where t1.name= t2.name

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MYSQL中 select * from table1 t1, table2 t2 where t1.name= t2.name相关的知识,希望对你有一定的参考价值。

name是中文,表数据1万多条,查一下要15秒,怎么解决效率问题?

如果能更改表结构:

1、增加一个表table3,字段为id,name,主键id

2、table1、table2分别增加一个外键字段nameid,来自于table3的id

3、 select * from table1 t1, table2 t2 where t1.nameid= t2.nameid

比如t1中有name值为a,然后t2中有name值a跟b,当t1值比较t2值时,a=a数据不输出,a=b数据输出,表与表关联,关联条件时中的值是要全部进行匹配的。

应用环境

与其他的大型数据库例如 Oracle、DB2、SQL Server等相比,mysql自有它的不足之处,但是这丝毫也没有减少它受欢迎的程度。对于一般的个人使用者和中小型企业来说,MySQL提供的功能已经绰绰有余,而且由于 MySQL是开放源码软件,因此可以大大降低总体拥有成本。

以上内容参考:百度百科-mySQL

参考技术A 如果能更改表结构:
1、增加一个表table3,字段为id,name,主键id
2、table1、table2分别增加一个外键字段nameid,来自于table3的id
3、 select * from table1 t1, table2 t2 where t1.nameid= t2.nameid
如果不能修改表结构:
1、两个表都增加索引,name
2、也可以通过程序来搞定,例如php,把两个表中的数据分别存放入两个数组,然后依据name组装数组
参考技术B 感觉你要查询所有的数据,没有什么可以解决效率的,你可以建立索引

MYSQL IF SELECT COUNT() 大于零 select * from table else return nothing found

【中文标题】MYSQL IF SELECT COUNT() 大于零 select * from table else return nothing found【英文标题】:MYSQL IF SELECT COUNT() Is greater that zero select * from table else return nothing found 【发布时间】:2014-03-22 11:12:12 【问题描述】:

我正在寻找一种方法来进行如下查询:

Mysql:

示例:IF SELECT COUNT(column_XX) WHERE column_XX = value_XX FROM table_XX 大于零 (0) 然后 SELECT 一切或 SELECT * FROM that table_XX WHERE column_XX = value_XXreturn em> 所有数据 ...否则返回 '没有找到' 或只是零 (0)

简单来说,如果列中的所有值都大于零,我想从表列中选择所有数据,否则只选择值>=1 并返回所有值。

SINGLE QUERY中可以应用哪种魔法来完成它?...我真的卡住了,谢谢。

【问题讨论】:

你说的单查询,没有连接的查询是什么意思? 是的,对于关节或任何可以工作但不像 Query1: COUNT 然后 QUERY2: 在PHP 级别中选择...。COUNTSELECT 应该在 @ 执行987654332@ 级别我只需要PHP 级别的结果......希望它很清楚......再次感谢! 【参考方案1】:

这行得通吗!

SELECT * FROM test_enum;
+------+-------+----------+
| ID   | Name  | IsActive |
+------+-------+----------+
|    1 | Abdul | No       |
|    1 | Abdul | Yes      |
+------+-------+----------+
2 rows in set (0.00 sec)

SELECT * FROM test_enum WHERE EXISTS(SELECT * FROM test_enum WHERE IsActive = 'No') AND IsActive = 'No';
+------+-------+----------+
| ID   | Name  | IsActive |
+------+-------+----------+
|    1 | Abdul | No       |
+------+-------+----------+
1 row in set (0.00 sec)

【讨论】:

【参考方案2】:

你可以这样尝试:

SELECT * FROM table_XX
WHERE column_XX = (
  SELECT column_XX FROM table_XX 
  WHERE column_XX = value_XX GROUP BY column_XX HAVING COUNT(column_XX) > 0
)

【讨论】:

SUPER BRAIN!.... 只是一件事如何在这个战术中假定 IFELSE 结构? 我的意思是我将如何使用ELSEreturn (0)'没有找到' if @987654328 @ 是 < 1 在 DB 级别? @UniversalGrasp 只会是空结果集,还不够吗? 好的....我不能同意更多....感谢一百万次...这为我节省了大量的谷歌搜索时间.... [接受的答案]

以上是关于MYSQL中 select * from table1 t1, table2 t2 where t1.name= t2.name的主要内容,如果未能解决你的问题,请参考以下文章

MySQL SELECT * WHERE column ='value'from 2 tables

Mysql DB select from table where field语句java

MySQL中SELECT * FROM [变量] 如何实现?

MYSQL:SELECT * FROM customer_table 隐藏 customer_password? [复制]

MYSQL IF SELECT COUNT() 大于零 select * from table else return nothing found

MySql SELECT * FROM table_name WHERE col_name IN (任何值)