簡體   English   中英

使用多個條件選擇不同的值

[英]Selecting Distinct Values with multiple conditions

我試圖根據一個表的DISTINCT值向表中插入條目,這些表也不包含單獨表中的值。 我假設問題出在我的JOIN中。

在表wp_posts中,ID的值是唯一的,但在表wp_term_relationships中,object_id可以有多個條目。

我想要的是獲取描述中包含某些單詞的所有不同ID(在wp_posts中),但也沒有與該表中與object_id相關聯的wp_term_relationships表中的某些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';

這將工作:

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';

不確定您正在使用哪個數據庫服務器,但嘗試更改您的最后條件:

AND NOT wp_term_relationships.wp_term_relationships = '5209';

至:

AND wp_term_relationships.wp_term_relationships <> '5209';

如果我正確理解您的問題,您需要首先從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';

您在選擇中硬編碼了分類法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);

查詢:

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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM