MYSQL 在一列上选择两个值
Posted
技术标签:
【中文标题】MYSQL 在一列上选择两个值【英文标题】:MYSQL Select on two values one column 【发布时间】:2012-12-21 04:38:11 【问题描述】:我需要从我的 mysql 表中选择一行。
表格中有两行具有一个相等的值。
TABLE
-----
articleId
keywordId
现在我需要选择一篇文章,它的关键字 ID = 1,关键字 ID = 12。
每个指向关键字的链接都有自己的记录。
我怎样才能通过一次选择查询来知道是否有一篇文章与这两个关键字匹配?
【问题讨论】:
【参考方案1】:SELECT *
FROM `table_name`
WHERE `keywordId` = '1' AND `keywordId` = '12'
【讨论】:
确保拼写 'TABLE' :)【参考方案2】:试试这个:
SELECT *
FROM tablename
WHERE keywordId IN (1, 12)
GROUP BY articleId
HAVING COUNT(*) = 2;
查看SQL FIDDLE DEMO
【讨论】:
SELECT ccdn_nid, COUNT( * ) FROMccdn_cmdt
WHERE cmdt_tid
IN (1, 31584) GROUP BY ccdn_nid
HAVING COUNT( * ) =2 我试过了,但仍然得到结果仅在 1 中有记录。有什么想法吗?
@user1955019 查看演示。
嘿 Saharsh,我仍然无法正常工作:SELECT ccdn_nid
FROM ccdn_cmdt
WHERE cmdt_tid
IN (1, 31641) GROUP BY ccdn_nid
HAVING COUNT(*) = 2 我的表是这样的: ccdn_nid int(11) cmdt_tid int(11) ccdncmdt_outpid int(11) 仍然得到一个结果结果。
这真的很奇怪,在 Fiddle 中它可以工作:sqlfiddle.com/#!2/eff9f/2。但是在我们的 mysqlserver 中完全相同的查询会产生 50000 条记录...
找到了!由于 KeywordId 为 1 但有另一个 outputID 的记录更多,因此它计为 2。现在只剩下一个 WHERE 已修复。谢谢萨沙什! :)【参考方案3】:
这称为Relation Division。这是一种方法:
SELECT *
FROM tablename
WHERE articleId IN
(
SELECT articleId
FROM tablename
WHERE KeywordId IN (1, 2)
GROUP BY articleId
HAVING COUNT(KeywordId ) = 2
);;
【讨论】:
在每分钟数百次查询中使用此查询时会大大降低数据库速度吗? @user1955019 这取决于您在该表中有多少行。【参考方案4】:SELECT *
FROM table
WHERE keywordId IN (1, 12);
【讨论】:
【参考方案5】:您还可以对每个关键字使用子查询并加入它们
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 更有效
【讨论】:
【参考方案6】:select ArticleId from Table where keywordId = 1
Intersect
select ArticleId from Table where KeywordId = 12
【讨论】:
这不存在或不工作。它可能在以前的版本中有效。以上是关于MYSQL 在一列上选择两个值的主要内容,如果未能解决你的问题,请参考以下文章
在一列上选择 DISTINCT,返回多个其他列(SQL Server)