我想找到可以应用所有标签的行

时间:2017-04-10 05:14:33

标签: mysql sql phpmyadmin tags

我有一张表如下

enter image description here

我想找到一个u_t_upload_id,其中u_t_tag_id - 1和2都被应用。在这种情况下它是1,因为u_t_tag_id - 1和2应用于u_t_upload_id 1。

enter image description here

是否有任何简单的查询来解决此问题

我上面给出的一个例子是真正想要的是显示u_t_upload_id,其中所有给定的u_t_tag_id都被应用。这是1和2是输入的一个例子。

4 个答案:

答案 0 :(得分:1)

您可以使用以下查询:

SELECT u_t_upload_id
FROM uploads_tags
WHERE u_t_tag_id IN (1, 2)
GROUP BY u_t_upload_id
HAVING COUNT(DISTINCT u_t_tag_id) = 2

HAVING子句检查具有2个不同 u_t_upload_id值的u_t_tag_id个群组。由于WHERE子句会过滤掉u_t_tag_id IN (1, 2)以外的记录,因此保证查询返回与相关的u_t_upload_id {{1} }值。

答案 1 :(得分:0)

我找到了一个简单的查询来解决这个问题

SELECT u_t_upload_id FROM uploads_tags WHERE (u_t_tag_id=1 OR u_t_tag_id=2) GROUP BY u_t_upload_id HAVING COUNT(*)=2

答案 2 :(得分:0)

试试这个:

SELECT Distinct(u_t_upload_id) FROM table WHERE u_t_upload_id = 1 AND u_t_upload_id = 2

答案 3 :(得分:0)

我还在学习关系部门,所以我对以下代码没有百分之百的信心。但是这里......

SELECT *
FROM tblTable AS X
WHERE NOT EXISTS ( SELECT *
                   FROM tblTable AS Y
                   WHERE Y.u_t_tag_id IN ( 1, 2 )
                     AND NOT EXISTS ( SELECT *
                                      FROM tblTable AS Z
                                      WHERE Z.u_t_upload_id = X.u_t_upload_id
                                        AND Z.u_t_tag_id = Y.u_t_tag_id )
                 )
ORDER BY u_t_upload_id;

我针对使用以下脚本创建的测试数据库测试了上述代码...

CREATE DATABASE RelationalDivision002;
USE RelationalDivision002;
CREATE TABLE tblTable
(
    u_t_id          INT,
    u_t_upload_id   INT,
    u_t_tag_id      INT
);
INSERT INTO tblTable( u_t_id,
                      u_t_upload_id,
                      u_t_tag_id )
VALUES ( 1, 1, 1 ),
       ( 2, 1, 2 ),
       ( 3, 2, 3 ),
       ( 4, 3, 4 ),
       ( 5, 3, 5 ),
       ( 6, 3, 6 ),
       ( 7, 2, 1 ),
       ( 7, 3, 1 );

我使用最内部SELECT的WHERE条件的任意组合来测试代码。以上是产生所需输出的唯一方法。

我几乎弄明白了为什么。

如果您有任何问题或意见,请随时与我联系。

谢谢。