2016-09-22 3 views
1

Добрый вечер,Mysql: выберите значение, которое соответствует нескольким критериям на нескольких строках

У меня есть две таблицы t1 и t2

В t1, у меня есть две переменные, идентификатор (который однозначно идентифицировать каждую строку) и DOC (что может быть общим для нескольких идентификаторов)

В t2 у меня есть три переменные, ID (которые не обязательно однозначно идентифицируют строки здесь), AUTH и TYPE. Каждый идентификатор имеет максимум 1 отдельный AUTH.

Образец данных:

То, что я хотел бы сделать, это выбрать Документах, которые имеют идентификатор с AUTH = «ЕР», а также иметь идентификатор с AUTH = «US» , У них могут быть дополнительные идентификаторы с другими AUTH, но они должны иметь по крайней мере эти два.

Таким образом, у меня будет итоговая таблица с DOC, ID и AUTH (должно быть не менее двух идентификаторов на документ, но это может быть больше, если для этого DOC существует дополнительный AUTH для США и EP)

желаемые результаты:

+1

Каким образом желаемого результата имеет ID 5. Как он удовлетворяет это условие? –

+1

Потому что ID 5 является частью DOC B, которая удовлетворяет условию благодаря ID 3 и ID 4. – llauc

+0

Получил его. Я обновил ответ –

ответ

1

Это должно работать:

SELECT DISTINCT (T1.ID), T1.DOC, T2.AUTH FROM T1 
LEFT JOIN T2 ON T2.ID = T1.ID 
WHERE T1.DOC IN(SELECT T1.DOC FROM T2 
       LEFT JOIN T1 ON T1.ID = T2.ID 
       WHERE T2.AUTH IN('EP','US') 
       GROUP BY T1.DOC HAVING COUNT(DISTINCT T2.AUTH) = 2) ; 
+0

Кажется, что сработало! Большое спасибо за вашу помощь. – llauc

+0

Добро пожаловать в переполнение стека. Я рад, что это сработает для вас. Когда бы ни работал какой-либо ответ, вы обязательно отметьте правильный ответ. Подробнее здесь http://stackoverflow.com/tour –

+0

Готово! Я новичок в sql, поэтому у меня есть два вопроса относительно кода: - Почему вы помещаете (T1.ID) между скобками в первой строке? - Вы знаете, как я мог иметь столбец со счетом _AUTH_ за _DOC_? Так что, в таблице результатов выше, эта колонка будет: ** 2 ** ** 2 ** ** 3 ** ** 3 ** ** 3 ** Я знаю, как сделайте это в stata, но было бы неплохо узнать немного больше sql! Еще раз спасибо – llauc

0

Если бы я мог понять, правильно запрос будет что-то вроде этого:

select t1.doc, t1.id, t2.auth from t1 
left join t2 on t2.id = t1.id 
where t1.doc in(select t1.doc from t2 
       left join t1 on t1.id = t2.id 
       where t2.auth in('EP','US')); 

Несмотря на то, набор результатов в основном будет первая таблица данных выборки, из-за ID 6 который имеет AUTH = «EP» и, следовательно, к ID 7, который имеет тот же DOC от ID 6.