2013-05-29 6 views
2

У меня есть 3 таблицы:Хороший способ запроса для кросс-таблицы

A(k1,A)B(k1,k2,B) и C(k2,C).

Я хочу отфильтровать все A, удовлетворяющие условию C.k2. в этом примере, я должен фильтровать пройти через таблицу B: фильтровать все B, которые имеют один и тот же атрибут k1 с A, и фильтровать все атрибуты C k2 с помощью B (которые я ранее фильтровал).

У меня есть уродливый способ сделать это:

select * from A where k1 in (select * .....) // это выглядит некрасиво и трудно проследить

У меня есть, хотя об использовании join функции, но на самом деле не знаю, как это сделать. Скажите, пожалуйста, лучший способ для этого запроса.

Спасибо :)

+2

Можете ли вы разместить структуру своего стола? Не получил ваш язык –

+0

Ваш «уродливый» метод гарантирует, что вы не получите повторяющиеся строки 'A', которые вы можете получить с помощью объединения, если вы не сделаете что-то вроде' select a a. * ... ' –

ответ

7

Попробуйте этот запрос.

select * from A 
join b on a.k1 = b.k1 
join c on c.k2 = b.k2 

Explanation for JOIN

enter image description here

+1

+1: Хорошая диаграмма –

1

Это звучит довольно просто:

select * from A 
join B on B.k1 = A.k1 
join C on C.k2 = B.k2 
1

Если я правильно читал вашу структуру таблицы, то логика присоединиться бы так:

SELECT * 
FROM A 
JOIN B 
    ON A.k1 = B.k1 
JOIN C 
    ON B.k2 = C.k2 

Вы могли конечно, затем укажите в таблице SELECT, с которой вы хотите получать значения, например:

SELECT A.*,C.* 

или ограничить результаты с WHERE есть:

WHERE C.C = 'something' 
1

Использование присоединиться для извлечения данных из двух или более таблиц. см. Join Fundamentals

SELECT A.k1,B.k2 
FROM A 
JOIN B ON A.k1 = B.k1 
JOIN C ON B.k2 = C.k2 
Смежные вопросы