Mysql在句中

时间:2011-10-31 17:08:51

标签: mysql

也许我没解释清楚。

这些是表格:

表1

CREATE TABLE `notforeverdata` (
`id` int(11) NOT NULL auto_increment,
`num` varchar(255) default NULL,
PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8;

INSERT INTO `notforeverdata` VALUES (1, '4,3,0,5');

表2

CREATE TABLE `notforeverdata2` (
`id2` int(11) NOT NULL auto_increment,
`num2` varchar(255) default NULL,
PRIMARY KEY  (`id2`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8;

INSERT INTO `notforeverdata2` VALUES (1, '2,5,6,8');

我需要做的是检查notforeverdata2列num2中是否存在notforeverdata中“num”列的任何数字。在这种情况下,notforeverdata的col num中的数字“5”存在于notforeverdata2中。

任何想法?

由于

1 个答案:

答案 0 :(得分:0)

对于这个例子,我将创建一个表,用随机数加载它,并搜索提供的列表中的每个数字。这是捕获:提供的列表必须以逗号开头并以逗号结束。

从你的问题,我将使用',3,2,5,'

以下是示例

use test
drop table if exists notforeverdata;
create table notforeverdata
(
    id int not null auto_increment,
    num VARCHAR(255),
    PRIMARY KEY (id)
);
insert into notforeverdata (num) values
(2),(7),(9),(11),(13),(15),(4),(3),(90),(97),(18),(5),(17);
SELECT * FROM notforeverdata;
SELECT * FROM notforeverdata WHERE LOCATE(CONCAT(',',num,','),(',3,2,5,'));

我实际上是在桌面上的MySQl 5.5.12中运行它。结果如下:

mysql> use test
drop table if exists notforeverdata;
Database changed
mysql> drop table if exists notforeverdata;
Query OK, 0 rows affected (0.03 sec)

mysql> create table notforeverdata
    -> (
    ->     id int not null auto_increment,
    ->     num VARCHAR(255),
    ->     PRIMARY KEY (id)
    -> );
Query OK, 0 rows affected (0.12 sec)

mysql> insert into notforeverdata (num) values
    -> (2),(7),(9),(11),(13),(15),(4),(3),(90),(97),(18),(5),(17);
Query OK, 13 rows affected (0.06 sec)
Records: 13  Duplicates: 0  Warnings: 0

mysql> SELECT * FROM notforeverdata;
+----+------+
| id | num  |
+----+------+
|  1 | 2    |
|  2 | 7    |
|  3 | 9    |
|  4 | 11   |
|  5 | 13   |
|  6 | 15   |
|  7 | 4    |
|  8 | 3    |
|  9 | 90   |
| 10 | 97   |
| 11 | 18   |
| 12 | 5    |
| 13 | 17   |
+----+------+
13 rows in set (0.00 sec)

mysql> SELECT * FROM notforeverdata WHERE LOCATE(CONCAT(',',num,','),(',3,2,5,'));
+----+------+
| id | num  |
+----+------+
|  1 | 2    |
|  8 | 3    |
| 12 | 5    |
+----+------+
3 rows in set (0.00 sec)

mysql>

当然,这将执行全表扫描。尽管如此,这仍然有效。

试一试!!!