2016-03-23 2 views
0

Если у меня есть схемы:множественного выбора заявления в MySQL Query

типа (а, б, в, г)

Имя (е, б, г)

Я я пытаюсь найти все результирующее имя «E», где «D» Тип больше числа, к которому мы обращаемся, используя общий «B».

Я пытаюсь понять, как несколько ЗЕЬЕСТА, такие как:

SELECT e FROM Name WHERE b = (SELECT b FROM Type WHERE d > 1); 

Может кто-то объяснить ошибку синтаксиса и как вложенный ЗЕЬЕСТ или я должен соединить две таблицы.

Благодаря

+0

'=' сравнивает одиночные значения. ваш '(select b)' может возвращать ** MULTIPLE ** значения, что означает, что вы должны 'where b IN (....)' вместо этого. –

ответ

2

Это может быть достигнуто с помощью простой INNER JOIN операции:

SELECT DISTINCT n.e 
FROM Name AS n 
INNER JOIN Type AS t ON n.b = t.b 
WHERE t.d > 1 

Вы также можете использовать EXISTS:

SELECT n.e 
FROM Name AS n 
WHERE EXISTS (SELECT 1 
       FROM Type AS t 
       WHERE n.b = t.b AND t.d > 1) 
0

Я думаю, что вы хотите использовать IN вместо =

SELECT e FROM Name WHERE b IN (SELECT b FROM Type WHERE d > 1); 

= для сравнения одного значения с другим значением.
IN, чтобы увидеть, существует ли значение, отбеливающее список из нескольких значений.

+0

Было бы гораздо лучше использовать соединение. –

+0

@IkeWalkern лучше использовать 'JOIN', чтобы сделать запрос неправильным? – mongotop

+1

Почему JOIN лучше, если я могу спросить? – Pipeline

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