我有一张表如下
我想找到一个u_t_upload_id,其中u_t_tag_id - 1和2都被应用。在这种情况下它是1,因为u_t_tag_id - 1和2应用于u_t_upload_id 1。
是否有任何简单的查询来解决此问题
我上面给出的一个例子是真正想要的是显示u_t_upload_id,其中所有给定的u_t_tag_id都被应用。这是1和2是输入的一个例子。
答案 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条件的任意组合来测试代码。以上是产生所需输出的唯一方法。
我几乎弄明白了为什么。
如果您有任何问题或意见,请随时与我联系。
谢谢。