2013-01-07 115 views
8

我需要從我的MySQL表中選擇一行。MYSQL選擇兩列值一列

在表中有兩行,其中有一個相等的值。

TABLE 
----- 
articleId 
keywordId 

現在我需要選擇一篇文章,有關鍵字ID = 1,以及關鍵字ID = 12

每一個環節,以關鍵字都有自己的紀錄。

如何才能做一個選擇查詢來知道是否有文章匹配兩個關鍵字?

回答

9

試試這個:

SELECT * 
FROM tablename 
WHERE keywordId IN (1, 12) 
GROUP BY articleId 
HAVING COUNT(*) = 2; 

檢查SQL FIDDLE DEMO

+0

SELECT ccdn_nid,COUNT(*)FROM 'ccdn_cmdt' WHERE'cmdt_tid' IN(1,31584) GROUP BY'ccdn_nid' HAVING COUNT(*)= 2 我tryed這一點,但仍然獲得,只是在1 任何想法記錄結果? –

+0

@ user1955019查看演示。 –

+0

嘿Saharsh, 我仍然無法得到它的工作: 選擇'ccdn_nid' FROM'ccdn_cmdt' 其中'cmdt_tid'IN(1,31641) GROUP BY'ccdn_nid' HAVING COUNT(*) = 2 我的表看起來像這樣: ccdn_nid INT(11) cmdt_tid INT(11) ccdncmdt_outpid INT(11) 仍然得到一個結果的結果。 –

1
SELECT * 
FROM `table_name` 
WHERE `keywordId` = '1' AND `keywordId` = '12' 
+0

確保拼寫 '表' :) –

2

這就是所謂的Relation Division。這裏是這樣做的一個辦法:

SELECT * 
FROM tablename 
WHERE articleId IN 
(
    SELECT articleId 
    FROM tablename 
    WHERE KeywordId IN (1, 2) 
    GROUP BY articleId 
    HAVING COUNT(KeywordId) = 2 
);; 
+0

當這個查詢在每分鐘的查詢次數中使用時,這個查詢是否會減慢數據庫的速度? –

+0

@ user1955019這取決於您在該表中有多少行。 –

0
SELECT * 
FROM table 
WHERE keywordId IN (1, 12); 
1

您還可以使用子查詢爲每個關鍵字,並加入他們的行列

select k1.articleId from 
(
    select articleId from TABLE where keywordId = 1 
) k1 
inner join 
(
    select articleId from TABLE where keywordId = 12 
) k2 on k1.articleId = k2.articleId 

根據索引和表的大小這可能比集團通過更有效

+0

thankssss大聲笑:P – CantThinkOfAnything

1
select ArticleId from Table where keywordId = 1 
Intersect 
select ArticleId from Table where KeywordId = 12