我有以下表格结构
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_author 和 brokers_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/