SQL查询从多个tag_id中选择唯一的图像

时间:2012-01-06 12:07:58

标签: mysql sql

我有一个类似于下面的SQL表。我想在tag_id匹配多个项目时带回独特的结果。 因此,如果我想查找具有image_id的每个tag_id = 106 and 73,我希望它能带回image_id 12345714 and 12345712

我已经尝试过了

SELECT * 
FROM tag_relationship
WHERE tag_id
IN ( 106, 73 ) 

但这会带回来

        id  image_id    tag_id
        61  12345706    73
        70  12345712    73
        72  12345712    106
        76  12345714    73
        77  12345714    106

我也尝试了GROUP BY,但这似乎不太正确。

全桌样本: image_id可以在不同的行中使用相同的数字,但会有不同的tag_id

       id   image_id    tag_id
        1   12345679    63
        2   12345679    83
        3   12345680    74
        4   12345680    108
        5   12345680    75
        6   12345683    103
        7   12345682    87
        8   12345682    105
        9   12345682    74
        10  12345682    81
        11  12345683    79
        12  12345683    109
        13  12345689    111
        14  12345689    69
        15  12345690    104
        16  12345687    110
        17  12345687    69
        18  12345687    91
        19  12345687    93
        20  12345687    63
        21  12345692    69
        22  12345692    104
        23  12345692    80
        24  12345692    76
        25  12345693    74
        26  12345693    99
        27  12345693    96
        28  12345693    94
        29  12345691    63
        30  12345691    69
        31  12345697    92
        32  12345697    76
        33  12345698    74
        34  12345699    97
        35  12345698    94
        36  12345699    98
        37  12345698    81
        38  12345699    105
        39  12345697    91
        40  12345694    100
        41  12345694    101
        42  12345694    94
        43  12345694    74
        44  12345696    78
        45  12345696    95
        46  12345696    112
        47  12345701    113
        48  12345701    114
        49  12345700    94
        50  12345700    91
        51  12345700    90
        52  12345702    87
        53  12345702    115
        54  12345702    80
        55  12345702    74
        56  12345704    78
        57  12345705    83
        58  12345705    84
        59  12345704    63
        60  12345705    104
        61  12345706    73
        62  12345706    64
        63  12345706    86
        64  12345706    88
        65  12345706    89
        66  12345713    80
        67  12345713    115
        68  12345713    81
        69  12345717    63
        70  12345712    73
        71  12345717    64
        72  12345712    106
        73  12345717    79
        74  12345712    74
        75  12345709    76
        76  12345714    73
        77  12345714    106
        78  12345715    68
        79  12345716    116
        80  12345715    69
        81  12345716    71

4 个答案:

答案 0 :(得分:2)

SELECT   image_id 
FROM     tag_relationship
WHERE    tag_id IN ( 106, 73 )
GROUP BY image_id
HAVING   COUNT(*) = 2

答案 1 :(得分:0)

SELECT DISTINCT image_id 
FROM tag_relationship
WHERE tag_id
IN ( 106, 73 ) 

答案 2 :(得分:0)

这可能真的很愚蠢/简单,但我认为这会奏效:

SELECT image_id
FROM tag_relationship
WHERE 
  tag_id = 106 AND tag_id = 73

答案 3 :(得分:0)

试试这个

SELECT DISTINCT t1.image_id 
FROM tag_relationship t1
     JOIN tag_relationship t2 ON t1.image_id=t2.image_id
WHERE t1.tag_id=106
      and t2.tag_id=73