2009-12-10 61 views
3

查詢:從兩個同桌選擇與相交

SELECT id_user 
    FROM Rating 
Where id_movie=2 
INTERSECT 
SELECT id_user 
    FROM Rating 
Where id_movie=3 

,但我得到:

1064 - 你在你的SQL語法錯誤;檢查對應於你的MySQL服務器版本正確的語法附近使用「INTERSECT SELECT id_user評級從哪裏id_movie = 3 LIMIT 0,30」在行1

任何具有解決方案手冊?

+2

錯誤是因爲MySQL不支持'INTERSECT'關鍵字。 – 2009-12-10 02:37:02

回答

5

下面的查詢會做..

SELECT id_user 
FROM Rating 
Where id_movie=2 and id_user in 
      (SELECT id_user FROM Rating Where id_movie=3); 
+2

你應該注意這個語法的NULL。 – 2009-12-10 02:35:53

+0

根據每個子查詢結果大小和順序(B中的A和id_user或A中的id和B中的id_user),mysql服務器可能需要很長時間才能給出結果。 – Cyrille 2013-05-14 13:28:07

2

如何:

SELECT r2.id_user 
FROM Rating AS r2 
    JOIN 
    Rating AS r3 
    ON r3.id_user = r2.id_user 
    AND r2.id_movie=2 
    AND r3.id_movie=3; 

這裏的想法是,你想加入排名的一排排名的另一行,爲此,同用戶已經看過電影2和3.

3

相交,減號關鍵字在MySql中不存在,變通辦法是

  1. 內部聯接,並
  2. 子查詢或
  3. 左聯接分別。

請看這裏

Doing INTERSECT and MINUS in MySQL

我給一個鏡頭(雖然我是一個SQL Server的傢伙)

輸入:

id_user id_movie 
101 1 
102 2 
102 3 
104 4 
102 5 
107 6 
102 2 
103 3 
109 9 
110 2 
110 3 

輸出通過使用相交(如果在SQL Server中運行)將是

id_user 
102 
110 

MySQL的兼容的查詢使用

查詢1Inner join

select distinct a.id_user 
from Rating a 
join Rating b on a.id_user = b.id_user 
where a.id_movie = 2 and b.id_movie = 3 

使用查詢2Cross join

select distinct a.id_user 
from Rating a, Rating b 
where a.id_user = b.id_user 
    and a.id_movie = 2 
    and b.id_movie = 3 

查詢3使用子查詢

上面已經回答。