我在下面的表格结构LEFT JOIN与多个条件
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条结果。
UPDATE
我无法管理http://sqlfiddle.com/插入数据,所以下面的链接是两个表REVIEW_AUTHOR和brokers_comments转储。
同样我的问题是将不同的列(user_name,user_email,client_id)从表brokers_comments转移到表review_author,然后根据两个表中的关系名/ email/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
P.S.我有人会做一个在线mysql数据库,请放在评论,所以我可以把它放在那里。
已解决 只有现在我意识到user_email必须是唯一的。在此基础上我做了以下的select语句:
SELECT
author.id
FROM brokers_comments AS broker
LEFT JOIN review_author AS author
ON broker.user_email = author.email
第一件事,你尝试过了'SELECT COUNT(*)FROM review_author',以确保你有正确的记录数?第二件事,如果你不插入查询是错误的,你将需要改变它。第三件事你可以发布一个sqlfiddle的一些相关信息供我们测试吗? –
您能否显示一小组示例数据和预期结果来描述哪些不起作用? – AdamMc331
@ McAdam331在**更新**部分详细信息中添加。 – Igor