2010-01-05 3 views
3

У меня есть следующий запрос с использованием INTERSECT, и я не могу понять, как его перевести в MySQL с помощью INNER JOIN.Перевод инструкции 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, но я не могу сказать, потому что я не знаю структуру таблицы, ограничение уникальности и т.д.


Re вашего скрытый комментария: Я попытался следующий сценарий в моей тестовой базе данных:

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

+1

Право; В приведенном выше примере я показываю самоподключение. Вы можете использовать «таблицу» три раза в одном запросе и дать каждому экземпляру отдельный псевдоним таблицы *, чтобы вы могли ссылаться на столбцы из каждого соответствующего экземпляра. –

+0

Да, я следил за этой моделью, и она все равно не сработает. – Brian

Смежные вопросы