【发布时间】:2012-12-21 04:38:11
【问题描述】:
我需要从我的 mysql 表中选择一行。
表格中有两行具有一个相等的值。
TABLE
-----
articleId
keywordId
现在我需要选择一篇文章,它的关键字 ID = 1,关键字 ID = 12。
每个指向关键字的链接都有自己的记录。
我怎样才能通过一次选择查询来知道是否有一篇文章与这两个关键字匹配?
【问题讨论】:
我需要从我的 mysql 表中选择一行。
表格中有两行具有一个相等的值。
TABLE
-----
articleId
keywordId
现在我需要选择一篇文章,它的关键字 ID = 1,关键字 ID = 12。
每个指向关键字的链接都有自己的记录。
我怎样才能通过一次选择查询来知道是否有一篇文章与这两个关键字匹配?
【问题讨论】:
SELECT *
FROM `table_name`
WHERE `keywordId` = '1' AND `keywordId` = '12'
【讨论】:
试试这个:
SELECT *
FROM tablename
WHERE keywordId IN (1, 12)
GROUP BY articleId
HAVING COUNT(*) = 2;
【讨论】:
ccdn_cmdt WHERE cmdt_tid IN (1, 31584) GROUP BY ccdn_nid HAVING COUNT( * ) =2 我试过了,但仍然得到结果仅在 1 中有记录。有什么想法吗?
ccdn_nid FROM ccdn_cmdt WHERE cmdt_tidIN (1, 31641) GROUP BY ccdn_nid HAVING COUNT(*) = 2 我的表是这样的: ccdn_nid int(11) cmdt_tid int(11) ccdncmdt_outpid int(11) 仍然得到一个结果结果。
这称为Relation Division。这是一种方法:
SELECT *
FROM tablename
WHERE articleId IN
(
SELECT articleId
FROM tablename
WHERE KeywordId IN (1, 2)
GROUP BY articleId
HAVING COUNT(KeywordId ) = 2
);;
【讨论】:
SELECT *
FROM table
WHERE keywordId IN (1, 12);
【讨论】:
您还可以对每个关键字使用子查询并加入它们
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
根据索引和表大小,这可能比 Group By 更有效
【讨论】:
select ArticleId from Table where keywordId = 1
Intersect
select ArticleId from Table where KeywordId = 12
【讨论】: