繁体   English   中英

选择列具有多个值的行

[英]Selecting rows with multiple values for a column

在MySQL上,给定下表(image_tags):

image_id | tag_id
-----------------
1        | 100
1        | 20
2        | 100
3        | 20

我想选择tag_id = 100 AND tag_id = 20的行,在这种情况下,我想要的结果是:

image_id
--------
1        

我尝试过,但是找不到在纯SQL中执行此操作的正确方法。 谢谢!

假设( image_idtag_id )对是唯一的:

SELECT image_id
FROM image_tags
WHERE tag_id IN ('20', '100')
GROUP BY image_id
HAVING count(*) = 2

试试这个:

SELECT image_id FROM MyTable
WHERE tag_id IN (100,20)
GROUP BY image_id
HAVING COUNT(*) = 2

如果要选择每一行,请尝试以下操作:

SELECT * FROM MyTable
WHERE image_id IN
(
    SELECT image_id FROM MyTable
    WHERE tag_id IN (100,20)
    GROUP BY image_id
    HAVING COUNT(*) = 2
)

看到这个SQLFiddle

简单的JOIN查询

SELECT a.image
FROM image_tags a
INNER JOIN image_tags b ON a.image_id = b.image_id AND b.tag_id = 20
WHERE a.tag_id = 100

或使用计数,但应对图像是否存在重复标签

SELECT DISTINCT image_id
FROM image_tags
WHERE tag_id in ('20', '100')
GROUP BY image_id
HAVING count(DISTINCT tag_id) = 2

您所做的是对的,您也可以尝试一下

从image_tags中选择*,其中tag_id位于('100','20',....)

SELECT Image_ID FROM 
(SELECT Image_ID FROM tab
WHERE Tag_ID = 100) tag100
JOIN
(SELECT Image_Id FROM tab
WHERE TagID = 20) tag20

我认为这就是您要寻找的-您想要同时具有TagID等于20和TagID等于100的那些记录,对吗?

select image_id 
from image_tags 
where image_id IN (
            select image_id 
            from image_tags 
            where tag_id = 100) 
AND tag_id = 20

您可以使用

select image_id from test
where image_id IN (select image_id from test
where tag_id = '100') AND tag_id = '20'

检查演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM