mysql - JOIN LEFT 有多个条件

标签 mysql

我有以下表格结构

CREATE TABLE IF NOT EXISTS `review_author` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(100) NOT NULL,
  `email` varchar(255) NOT NULL,
  `client_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `IDX_37D99F0819EB6921` (`client_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=2110 ;

CREATE TABLE IF NOT EXISTS `brokers_comments` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `hb_broker_id` int(11) NOT NULL,
  `client_id` int(11) DEFAULT NULL,
  `user_name` varchar(100) NOT NULL,
  `user_email` varchar(100) NOT NULL,
  `state` int(11) NOT NULL DEFAULT '0',
  `text` varchar(3000) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `IDX_5365DFFB9FE55EF7` (`hb_broker_id`),
  KEY `IDX_5365DFFB19EB6921` (`client_id`),
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1583 ;

在提取值之前,我做了以下查询:

 INSERT INTO review_author (
                    name,
                    email,
                    client_id
                )
                SELECT
                    brokers_comments.user_name,
                    brokers_comments.user_email,
                    brokers_comments.client_id
                FROM brokers_comments
                LEFT JOIN review_author
                ON brokers_comments.user_name=review_author.name AND
                brokers_comments.user_email=review_author.email AND
                brokers_comments.client_id=review_author.client_id
                WHERE  review_author.id  IS NULL

不在 review_author 中应该是表 brokers_comments 中的所有作者,现在我正在尝试使用以下查询获取作者 ID:

SELECT
    review_author.id
FROM brokers_comments
LEFT JOIN review_author
    ON brokers_comments.user_name=review_author.name AND
    brokers_comments.user_email=review_author.email AND
    brokers_comments.client_id=review_author.client_id
WHERE  review_author.id  IS NOT NULL

但我从表 brokers_comments 的总共 1531 条记录中获得了大约 110 个结果。

更新

我无法在 http://sqlfiddle.com/ 中插入数据所以以下链接是两个表 review_authorbrokers_comments 的转储。

同样,我的问题是将不同的列(user_name、user_email、client_id)从表 brokers_comments 传输到表 review_author,然后根据两个表中的关系名称/电子邮件/client_id 选择 review_author.id。

http://wrttn.in/7ca325 http://wrttn.in/3a7885

插入新作者错误并重复。以下是新的正确形式。

INSERT INTO review_author (
                    name,
                    email,
                    client_id
                )
                SELECT  user_name, user_email, client_id
                FROM    brokers_comments AS broker
                WHERE   NOT EXISTS
                        (
                        SELECT  1
                        FROM    review_author AS author
                        WHERE   author.email = broker.user_email
                        )
                GROUP BY broker.user_email

附言我有人会制作一个在线工作的 mysql 数据库,请发表评论,这样我就可以把它放在那里。

已解决 直到现在我才意识到 user_email 必须是唯一的。基于此,我做了以下选择声明:

SELECT 
    author.id
FROM  brokers_comments AS broker
LEFT JOIN review_author AS author
ON broker.user_email = author.email

最佳答案

您似乎在 JOIN 子句中使用了多余的字段,因为 client_id 是一个键,您只需要在此字段上连接表。您获得不同数量记录的可能原因是这两个表中相同 client_id 的名称/电子邮件不同。所以,你的两个查询应该是这样的:

 INSERT INTO review_author (
                    name,
                    email,
                    client_id
                )
                SELECT
                    brokers_comments.user_name,
                    brokers_comments.user_email,
                    brokers_comments.client_id
                FROM brokers_comments
                LEFT JOIN review_author
                ON brokers_comments.client_id=review_author.client_id
                WHERE  review_author.id  IS NULL

SELECT
    review_author.id
FROM brokers_comments
LEFT JOIN review_author
    ON brokers_comments.client_id=review_author.client_id
WHERE  review_author.id  IS NOT NULL

关于mysql - JOIN LEFT 有多个条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27624247/

相关文章:

PHP/mySQL 和 Google map 地理编码

mysql - 我想将函数的 NOT NULL 字符串结果与表中可以为 NULL 的字段组合起来

php - 如果mysql的php中的获取值为0,如何设置变量?

mysql - 帮助在 Yii 中进行 SQL 查询

php - 用户事件墙的最佳做法

php - 我有这个 php/mysql/ajax 代码,我想在记录显示时添加淡入淡出效果

MySQL 与 SQL Server 与 Oracle

mysql - 如何使用 SQL 获取两个表的所有 3 个组件的计数?

php - 提供静态内容——Wordpress 无 Cookie 子域

mysql - 如何在 Django 中设置 collat​​ion_connection?