选择具有多个条件的不同值

时间:2019-04-16 18:40:33

标签: sql

我正在尝试根据一个表的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';

4 个答案:

答案 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;