2012-03-12 4 views
2

У меня есть две таблицы. Я хочу получить UID из таблицы 1, где соответствующие столбцы из обеих таблиц совпадают.MYSQL Как выбрать данные из одной таблицы, только если значения столбцов из этой таблицы соответствуют значениям столбцов другой таблицы?

Table 1    

UID SubjectA   
1  Cows   
2  Chickens  
3  Mice   
4  Rabbits   
5  Cows   

Table 2 

Name SubjectB 
A  Cows 
B  Cows 
C  Cows 
D  Cows 
E  Mice 

Ожидаемый результат *

Fetch UIDs: 1, 3, 5.

Я не совсем понимаю, объединения и союзы. Оба, кажется, объединяют две таблицы. Каков правильный способ сделать это?

ответ

4

Есть несколько способов сделать это ...

Во-первых, я предлагаю использовать exists:

SELECT 
    UID 
FROM 
    Table1 
WHERE EXISTS (
    SELECT 1 
    FROM Table2 
    WHERE SubjectB = SubjectA 
) 

Или, вы можете использовать join и distinct:

SELECT DISTINCT 
    UID 
FROM 
    Table1 JOIN 
    Table2 ON SubjectB = SubjectA 

Наконец, вы можете использовать in:

SELECT 
    UID 
FROM 
    Table1 
WHERE SubjectA IN (
    SELECT SubjectB 
    FROM Table2 
) 
+0

спасибо за быстрый ответ! могу ли я спросить, что означает строка «SELECT 1»? Как изменилась бы функция, если бы было другое число, скажем, 2 или 3? – tjones

+0

Hoozah !!! Оно работает! Спасибо @ Майкл! – tjones

+0

@tjones 'exists' вернет true, если строка возвращается ... так как не имеет значения, какое значение находится в возвращаемой строке, жесткое кодирование - это оптимизация, чтобы SQL не мог вытащить фактическую значение из таблицы. не имеет значения, какое значение жестко закодировано ... это могут быть '2',' 3' или ''potato'' ... –

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