2010-01-05 38 views
3

我使用INTERSECT進行了以下查詢,我無法弄清楚如何使用INNER JOIN將其翻譯爲MySQL。將INTERSECT語句翻譯爲MySQL

SELECT DISTINCT Title, Variable FROM Table WHERE Location='Location1' AND Date='Date1' 
INTERSECT 
SELECT DISTINCT Title, Variable FROM Table WHERE Location='Location2' AND Date='Date2' 
INTERSECT 
SELECT DISTINCT Title, Variable FROM Table WHERE Location='Location3' AND Date='Date3' 

任何人都可以幫我一把嗎?

回答

5
SELECT t1.Title, t1.Variable 
FROM Table t1 
JOIN Table t2 USING (Title, Variable) 
JOIN Table t3 USING (Title, Variable) 
WHERE (t1.Location, t1.Date) = ('Location1', 'Date1') 
    AND (t2.Location, t2.Date) = ('Location2', 'Date2') 
    AND (t3.Location, t3.Date) = ('Location3', 'Date3'); 

您可能需要使用SELECT DISTINCT但我不能說,因爲我不知道你的表結構,唯一約束等


重新您的神祕評論:我嘗試以下劇本在我的測試數據庫:

DROP TABLE IF EXISTS MyTable; 
CREATE TABLE MyTable (
id  SERIAL PRIMARY KEY, 
title VARCHAR(20) NOT NULL, 
variable VARCHAR(20) NOT NULL, 
location VARCHAR(20) NOT NULL, 
date  DATE NOT NULL 
); 

INSERT INTO MyTable VALUES 
(DEFAULT, 'A Tale of Two Cities', 'variable', 'America', '2010-01-01'), 
(DEFAULT, 'A Tale of Two Cities', 'variable', 'England', '2010-02-01'), 
(DEFAULT, 'A Tale of Two Cities', 'variable', 'France', '2010-03-01'); 

SELECT t1.Title, t1.Variable 
FROM MyTable t1 
JOIN MyTable t2 USING (Title, Variable) 
JOIN MyTable t3 USING (Title, Variable) 
WHERE (t1.Location, t1.Date) = ('America', '2010-01-01') 
    AND (t2.Location, t2.Date) = ('England', '2010-02-01') 
    AND (t3.Location, t3.Date) = ('France', '2010-03-01'); 

輸出是這樣的:

+----------------------+----------+ 
| Title    | Variable | 
+----------------------+----------+ 
| A Tale of Two Cities | variable | 
+----------------------+----------+ 
+0

請注意,所有查詢都來自同一個表,我將如何處理? – Brian 2010-01-05 01:59:20

+1

正確;我在上面的例子中顯示了一個自加入。您可以在單個查詢中使用「表」三次,併爲每個實例分配一個獨特的*表別名*,以便您可以引用來自各個實例的列。 – 2010-01-05 02:03:16

+0

呵呵,我遵循這個模式,它仍然不會工作 – Brian 2010-01-05 02:43:23