2017-04-10 52 views
0

我有一個表如下我想找到我的地方所有標籤可應用於

enter image description here

我想找到一個u_t_upload_id行,其中既u_t_tag_id - 1和2是applied.That在這情況下,它爲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是輸入示例。

+0

我已將代碼更新爲經過測試的有效代碼片段。 – toonice

回答

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子句檢查u_t_upload_id組有2個不同u_t_tag_id值。由於WHERE子句篩選出的記錄不是u_t_tag_id IN (1, 2)以外的記錄,因此查詢將保證返回那些與相關的u_t_upload_id值,這兩個值都是u_t_tag_id值。

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 
+0

該查詢還將返回與*只有一個*'u_t_tag_id'值相關的'u_t_upload_id'值。 –

0

試試這個:

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

我還在學習關係司,所以我不是100%有信心下面的代碼。但在這裏不用...

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任意組合代碼在哪裏條件。以上是唯一產生所​​需輸出的產品。

我幾乎找出了原因。

如果您有任何問題或意見,請隨時與我聯繫。

謝謝。

相關問題