首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于单字段的Mysql交集

基于单字段的Mysql交集
EN

Stack Overflow用户
提问于 2015-01-17 07:20:42
回答 4查看 204关注 0票数 1

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

代码语言:javascript
复制
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');

代码语言:javascript
复制
 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');

作出选择后:

代码语言:javascript
复制
SELECT *
FROM `mytable1`
WHERE `insert_date` >= DATE_SUB(CURDATE(), INTERVAL 3 DAY)

我希望在mytable2中找到具有与上述查询所选历史字段相匹配的历史字段的记录子集。这基本上是一个基于历史域的交集。我不知道如何在mysql中编写这段代码,特别是因为“intersect”并不存在。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-01-17 07:26:37

您可以为这项工作使用一个简单的加入

代码语言:javascript
复制
SELECT 
  m1.* 
FROM
  mytable m1 
  INNER JOIN mytable2 m2 
    ON m1.history = m2.history 

返回:

代码语言:javascript
复制
id  emails      phones          history insert_date
237 PLEASE SET  addr@yahoo.com  gomez   2015-01-11

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

代码语言:javascript
复制
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函数关联起来。

orig.jpg

票数 2
EN

Stack Overflow用户

发布于 2015-01-17 07:26:28

根据您的要求,要从两个表中获取相交数据,可以使用联接

请查看以下链接:

MySQL Joins

MySQL Joins教程

干杯!!

票数 1
EN

Stack Overflow用户

发布于 2015-01-17 07:30:14

尝试像history这样的简单连接公共字段,从两个表中使用内部连接并添加,其中条件可以获得其他criteria.for的更多信息,请参阅Mysql 接合

代码语言:javascript
复制
SELECT 
  m1.* 
FROM
`mytable1` m1 
INNER JOIN `mytable2` m2 
    ON m1.history = m2.history
WHERE `insert_date` >= DATE_SUB(CURDATE(), INTERVAL 3 DAY)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27997211

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档