Mysql交集基于单个字段

时间:2015-01-17 07:20:42

标签: php mysql

我正在使用php和mysql。我有2张桌子:

CREATE TABLE IF NOT EXISTS `mytable` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`emails` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`phones` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`history` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`insert_date` date DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=259 ;

INSERT INTO `mytable` (`id`, `emails`, `phones`, `history`, `insert_date`)
VALUES
(118, 'PLEASE SET',  'addr@yahoo.com', 'None','2015-01-13'),
(237, 'PLEASE SET', 'addr@yahoo.com', 'gomez', '2015-01-11');

 CREATE TABLE IF NOT EXISTS `mytable2` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`history` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=259 ;

INSERT INTO `mytable2` (`id`, `history`)
VALUES
(1, 'bob',),
(2 , 'gomez');

做出选择后:

SELECT *
FROM `mytable1`
WHERE `insert_date` >= DATE_SUB(CURDATE(), INTERVAL 3 DAY)

我想在mytable2中找到记录子集,其记录字段与使用上述查询选择的历史记录字段相匹配。这基本上是基于历史字段的交叉点。我不确定如何在mysql中编写代码,特别是因为'相交'不存在。

4 个答案:

答案 0 :(得分:2)

您可以使用简单的JOIN来完成这项工作:

SELECT 
  m1.* 
FROM
  mytable m1 
  INNER JOIN mytable2 m2 
    ON m1.history = m2.history 

返回:

id  emails      phones          history insert_date
237 PLEASE SET  addr@yahoo.com  gomez   2015-01-11

您问题中的查询将如下所示:

SELECT 
  m1.* 
FROM
  mytable m1 
  INNER JOIN mytable2 m2 
    ON m1.history = m2.history 
WHERE `insert_date` >= DATE_SUB(CURDATE(), INTERVAL 3 DAY)

它正确地返回任何内容,因为唯一的合格记录的日期超过3天。

这是一个非常有用的信息图,将设置操作与SQL函数相关联

http://www.codeproject.com/KB/database/Visual_SQL_Joins/Visual_SQL_JOINS_orig.jpg

enter image description here

答案 1 :(得分:1)

根据您的要求,要从两个表中获取交叉数据,您可以使用加入

看看这些链接:

MySQL Joins

MySQL Joins Tutorial

干杯!!

答案 2 :(得分:1)

尝试使用 INNER JOIN 的两个表格中的history等简单加入公共字段,并为其他条件添加 WHERE 条件。有关详细信息,请参阅Mysql {{3 }}

SELECT 
  m1.* 
FROM
`mytable1` m1 
INNER JOIN `mytable2` m2 
    ON m1.history = m2.history
WHERE `insert_date` >= DATE_SUB(CURDATE(), INTERVAL 3 DAY)

答案 3 :(得分:1)

尝试加入Mysql

SELECT  tbl1.* FROM `mytable` tbl1 INNER JOIN `mytable2` tbl2 ON 
tbl1.history = tbl2.history WHERE `insert_date` >= DATE_SUB(CURDATE(), INTERVAL 3 DAY)