我正在尝试根据一个表的DISTINCT值向表中插入条目,这些值也不包含来自单独表的值。我假设问题出在我的JOIN中。
在表wp_posts中,ID的值是唯一的,但是在表wp_term_relationships中,object_id可以具有多个条目。
我要获取的所有唯一ID都包含描述中的某些单词(在wp_posts中),但是从wp_term_relationships表中没有与该表中的object_id相关联的某些term_taxonomy_id
感谢您的回复,我进行了一些更改,但仍然遇到问题。
//Here is what I have so far:
INSERT INTO wp_term_relationships (object_id, term_taxonomy_id, term_order)
SELECT DISTINCT ID, '5209', '0' FROM wp_posts JOIN wp_term_relationships
ON wp_posts.ID = wp_term_relationships.object_id
WHERE wp_posts.post_content LIKE '%Cadillac%'
AND wp_posts.post_content LIKE '%Escalade%'
AND wp_term_relationships.term_taxonomy_id not like '5209';
结果查询尝试插入不符合最后条件的值。我假设问题出在联接上。
回答后编辑:
感谢万根(Gen Wan)提出了促使我回答的代码! 这是起作用的正确代码:
INSERT INTO wp_term_relationships (object_id, term_taxonomy_id, term_order)
SELECT DISTINCT ID, '5209', '0' FROM wp_posts
JOIN (
select object_id, term_taxonomy_id from wp_term_relationships
WHERE wp_term_relationships.term_taxonomy_id = 5209
)a
ON wp_posts.ID = a.object_id
WHERE wp_posts.post_content LIKE '%Cadillac%'
AND wp_posts.post_content LIKE '%Escalade%'
AND a.term_taxonomy_id not like '5209';
答案 0 :(得分:0)
这将起作用:
INSERT INTO wp_term_relationships (object_id, term_taxonomy_id, term_order)
SELECT DISTINCT ID, '5209', '0' FROM wp_posts JOIN wp_term_relationships
ON wp_posts.ID = wp_term_relationships.object_id
WHERE wp_posts.post_content LIKE '%Cadillac%'
AND wp_posts.post_content LIKE '%Escalade%'
AND wp_term_relationships.term_taxonomy_id not like '5209';
答案 1 :(得分:0)
不确定您正在使用的数据库服务器,但尝试从以下条件更改您的最后一个条件:
AND NOT wp_term_relationships.wp_term_relationships = '5209';
收件人:
AND wp_term_relationships.wp_term_relationships <> '5209';
答案 2 :(得分:0)
如果我正确理解了您的问题,则需要首先从wp_term_relationships中获得不同的object_id和term_taxonomy_id:
select distinct object_id, term_taxonomy_id from wp_term_relationships
然后将派生表与您的条件结合起来:
INSERT INTO wp_term_relationships (object_id, term_taxonomy_id, term_order)
SELECT DISTINCT ID, '5209', '0' FROM wp_posts
JOIN (select distinct object_id, term_taxonomy_id from wp_term_relationships)a
ON wp_posts.ID = a.object_id
WHERE wp_posts.post_content LIKE '%Cadillac%'
AND wp_posts.post_content LIKE '%Escalade%'
AND a.term_taxonomy_id not like '5209';
答案 3 :(得分:0)
您已在选择中对分类法ID = 5209进行了硬编码。因此,您的插入内容会将5209插入所有插入的行中。
SELECT DISTINCT ID, **'5209'**, '0'
请向我们显示示例数据,以便我们可以清楚地看到问题。
我去了这个免费的网站来创建数据库沙箱:https://www.db-fiddle.com/
然后,我运行您的查询,但结果没有出现问题。
如果您有不同的预期结果,请向我们展示。
谢谢。
站点:https://www.db-fiddle.com/ 复制并粘贴并执行:
模式:
create table wp_posts(ID integer, post_content varchar);
insert into wp_posts values (1, 'Cadillac Escalade');
insert into wp_posts values (2, 'Ford Escape');
insert into wp_posts values (3, 'Cadillac Escalade');
insert into wp_posts values (4, 'Escalade Cadillac');
insert into wp_posts values (5, 'Escalade Cadillac');
create table wp_term_relationships(object_id integer, term_taxonomy_id integer);
insert into wp_term_relationships values (1 ,5209);
insert into wp_term_relationships values (1 ,1000);
insert into wp_term_relationships values (2 ,5209);
insert into wp_term_relationships values (2 ,1000 );
insert into wp_term_relationships values (2 ,5209);
insert into wp_term_relationships values (3 ,1000);
insert into wp_term_relationships values (5 ,5209);
insert into wp_term_relationships values (5 ,1000);
QUery:
SELECT DISTINCT ID, term_taxonomy_id, '5209' as new_term_taxonomy_id, '0' as nothing_
FROM wp_posts
JOIN wp_term_relationships
ON wp_posts.ID = wp_term_relationships.object_id
WHERE wp_posts.post_content LIKE '%Cadillac%'
AND wp_posts.post_content LIKE '%Escalade%'
AND wp_term_relationships.term_taxonomy_id <> 5209;